這段代碼有什麼問題? obj.bVar在這裏沒有定義,爲什麼?如何將aVar的值分配給bVar?對象中的JavaScript變量賦值
var obj = {
aVar: 15,
bVar: this.aVar // This is undefined
};
console.log(obj.aVar);
console.log(obj.bVar);
這段代碼有什麼問題? obj.bVar在這裏沒有定義,爲什麼?如何將aVar的值分配給bVar?對象中的JavaScript變量賦值
var obj = {
aVar: 15,
bVar: this.aVar // This is undefined
};
console.log(obj.aVar);
console.log(obj.bVar);
this
,在JavaScript中,指的是當前範圍,這可以是一個函數調用或全局範圍。
在這裏,this
是全球範圍,即window
(除了如果你正在做一個函數)。
這裏有一個解決方案:
var obj = {
aVar: 15
};
obj.bVar = obj.aVar;
另外一個(可能或不相關,這取決於你的應用的上下文中)是使用一個構造函數:
function Obj(){
this.aVar = 15;
this.bVar = this.aVar;
}
var obj = new Obj();
或詳細:'bVar:(function(){return this.aVar;})。call(obj)' – David
@David嗯,這也需要你在設置bVar之前創建obj –
由於函數被立即調用,需要obj存在,你不能在分配之前做到這一點。 –
的'價值這取決於如何調用包含上述代碼的函數。如果它在全局範圍內,'this'將是'window'對象。 – techfoobar
很多很多信息都可以在SO上找到。 – techfoobar