2013-12-18 14 views
1

我有以下對象:使用呼叫方法來引用在對象中的屬性 - JavaScript的

myObject = { 
    color: "yellow", 
    age: 23, 
    nationality: "usa", 
    getAge: function(){ 
     var age = 33; 
     alert(age); 
    } 
} 

我可以調用getAge()方法

myObject.getAge(); 

,我會在彈出得到33 -向上。

我想通過更改對象引用在警告框中獲得23。我想類似下面的

myObject.getAge.call(this); 

我的理解是,通過傳遞給調用方法,我改變的參考在getAge()方法到的myObject,然後應該允許警告框返回23.不幸的是,結果仍然是33.

如何更改參考myObject

+0

不改變'getAge',你根本無法。 「age」將始終引用盡可能小的範圍,這將始終是本地範圍。當查理布朗在他的回答中訪問'this.age'時,情況就不同了 - 這實際上允許切換範圍。但是,然後局部變量'var age'將不再工作。 –

+0

_「如何將此引用更改爲myObject的引用?」_ - 您現有的帶有'myObject.getAge()'_already_的示例將'this'設置爲'myObject'。你需要改變你的函數來使用'this.age',而不是在函數中使用局部變量。 – nnnnnn

回答

1
myObject = { 
    color: "yellow", 
    age: 23, 
    nationality: "usa", 
    getAge: function(){ 
     alert(this.age); 
    } 
} 
myObject.getAge(); 

你可能是一個構造函數更好,因爲這在那裏得到錯位。關於this如何工作,請參閱其他任何答案。

function person(){ 
    this.color = "yellow"; 
    this.age = 23; 
    this.nationality = "usa"; 
} 
person.prototype.getAge = function(){ 
    alert(this.age); 
}; 

var p = new person(); 
p.getAge(); 
-1

你可以做這樣的:

function getAge(){ 
    alert(this.age) 
} 

myObject = { 
    color: "yellow", 
    age: 23, 
    nationality: "usa" 
} 

getAge(myObject) // Alerts undefined 

getAge.call(myObject) // Alerts 23 

這樣,您就可以使用所有類型的對象有年齡屬性。

這裏的工作fiddle,檢查瀏覽器控制檯太

+0

-1:語法錯誤,不需要與對象解耦來實現此目的,因爲未定義的示例沒有意義。 –

+0

感謝您提供語法錯誤。我不鼓勵這種方法,但它儘可能接近我想要的OP – raam86

0

爲什麼不乾脆:

myObject = { 
    color: "yellow", 
    age: 23, 
    nationality: "usa" 
} 
myObject.getAge = function() { return myObject.age; }; 
相關問題