2013-02-28 69 views
2

爲什麼this關鍵字在下面的代碼表達不同的價值觀?「這個」關鍵字在javascript返回不同

var t = { 
    a: "a", 
    b: { 
     c: "c", 
     d: function() { 
      return this; 
     } 
    }, 
    f: function() { 
     return this; 
    }, 
    g: this 
} 

var k = t.f(), 
    l = t.g; 

alert(k); // returns [object object] i.e 't' 
alert(l); // returns [object DOMWindow] i.e 'window' 
+3

http://stackoverflow.com/questions/3127429/javascript-this-keyword?rq=1 – DCoder 2013-02-28 08:08:44

回答

6

如果你已經習慣了像C++,Java或C#,關於理解在JavaScript this的第一件事就是一些其他編程語言是:這是一個從this在其它語言完全不同的,即使它看起來很相似,有時甚至有相似的行爲。

當你創建t對象,你捕捉this如創建對象時的並將其存儲在屬性g。所以g將是什麼this是當t被創建。由於this指的是全局對象(window,在瀏覽器上),在默認情況下,除非你使用嚴格模式,這就是t.g會。

相反,你t.f功能越來越稱爲並返回呼叫中存在的的this值。在JavaScript(現在)中,this完全由確定,函數如何被稱爲而不是定義它的位置。特別是,當您將函數作爲從屬性引用中檢索函數的表達式的一部分調用時,this被設置爲調用中的對象。這是說,當你調用f期間做t.f()thist的複雜的方式。

一些進一步閱讀(我的博客):