2013-05-28 30 views

回答

2

因爲您在對象中使用this關鍵字。在這種情況下,this.b指的是未定義的內容,應該是window的屬性。

閱讀this article,瞭解示波器非常有用。

在這種情況下,你應該聲明的變量是這樣的:

b = 't'; //note there is not keywork var, it is a window global variable 
var a = { 
    c: [{ 
     b: 'a', 
     m: this.b //is 't' 
    }], 
    b: function() { 
     alert('hi'); 
    } 
}; 

alert(a.c[0].m); //will display 't' 
2

因爲(假設你在瀏覽器的上下文中執行這個)thiswindow,你沒有定義window.b

this的值取決於您執行當前函數的方式,而不是通過對象字面量。

MDN有​​。

0

當運行a.c [0] .m的值時,這並不是指a,而是指整個範圍。

如果你想你以後的行爲,則需要將其更改爲:

var a = { b: function() { alert('hi'); }, c: [{}] }; 
a.c[0].m = a.b;