2014-03-28 93 views
-2

早上好,在我的時區,此對象的JavaScript

我讀的Javascript的書,有一個例子,其中的「此」對象可能導致不同的結果,從我們所期望。

var name = 「The Window」; 

    var object = { 
      name : 「My Object」, 
      getNameFunc : function(){ 
        return function(){ 
          return this.name; 
          }; 
        } 
}; 

(object.getName = object.getName)(); // This will return global value "The window" 

我的問題是:「此」和「論據」變量fullfilled只是當一個函數被調用,所以在上面的代碼行,分配再次複製到的getName變量的函數參考,所以當函數被調用時,這應該指向「對象」對象,它爲什麼指向全局上下文?

在此先感謝

與問候

+1

什麼是'getName'? – thefourtheye

+0

好的,我已經明白了,assigment返回Function對象,所以從全局上下文中調用一個函數是一樣的。 非常感謝 – tt0686

+0

我覺得你的例子並不完整,'getName'缺失。你可以編輯你的問題,你應該接受一個答案:http://meta.stackoverflow.com/help/someone-answers – amoebe

回答

0

this值是經常改變的Javascript。一般來說:只有當你直接調用這個函數時,如object.getFoo(),this就是你所期望的。如果您首先創建對函數的引用(如var getFoo = object.getFoo),然後調用getFoo(),則會根據您所處的任何對象調用該函數。甚至可以使用callapplythis更改爲任何您想要的值。在您提供的示例中,無操作分配是將this設置爲window的一種令人困惑的方式。

也許你應該找一本更好的書;)