2014-01-21 123 views
0

這段代碼有什麼問題? obj.bVar在這裏沒有定義,爲什麼?如何將aVar的值分配給bVar?對象中的JavaScript變量賦值

var obj = { 
    aVar: 15, 
    bVar: this.aVar // This is undefined 
}; 

console.log(obj.aVar); 
console.log(obj.bVar); 
+2

的'價值這取決於如何調用包含上述代碼的函數。如果它在全局範圍內,'this'將是'window'對象。 – techfoobar

+0

很多很多信息都可以在SO上找到。 – techfoobar

回答

4

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(); 
+0

或詳細:'bVar:(function(){return this.aVar;})。call(obj)' – David

+1

@David嗯,這也需要你在設置bVar之前創建obj –

+0

由於函數被立即調用,需要obj存在,你不能在分配之前做到這一點。 –