2011-06-15 95 views
0

我已經定義了一個JavaScript對象,其中我有兩個函數test1test2JavaScript中的函數調用

當我使用this.test1()test1test2,它說

test1不是一個函數

當我打電話test1test2使用objectname.test1()它工作正常。

爲什麼我無法使用this調用其他函數?

servicesFilteringObject = { 

     init: function(){ 
     // Created Checkboxes dynamically and associated handleFilter on onclick of it 

     }, 
     handlePrimeryContent: function(){ 
     // Some code 

     }, 
     handleFilter : function(){ 
      servicesFilteringObject.handlePrimeryContent();// works 
      this.handlePrimeryContent(); //does not work 
     } 
} 

    servicesFilteringObject.init(); 
+11

發佈代碼真的很難嗎? – Oded 2011-06-15 14:05:29

+4

顯示代碼。包括你用來調用'test2'的代碼。 – delnan 2011-06-15 14:05:39

+7

如果你發佈你的代碼,有人可以確切地告訴你問題是什麼。 – Pointy 2011-06-15 14:05:53

回答

1

如果 「handleFilter」 被調用作爲

servicesPrimaryObject.handleFilter(); 

然後this將引用該對象( 「servicesPrimaryObject」)。但是,如果將某個函數的引用傳遞給某個其他函數(可能是一個事件處理函數),那麼當從另一個上下文中調用時,將不會有this。您可以使用「綁定()」來解決這個問題:

somethingElse(servicesPrimaryObject.handleFilter.bind(servicesPrimaryObject)); 

這將確保this在函數內部將永遠是正確的對象時,此功能可在以後的某個點調用。

+0

非常感謝,解決了我的問題。 – Gopal 2011-06-15 15:35:59

+1

OK - @Gopal注意到「.bind()」在舊瀏覽器中不存在,但[MDC綁定文檔](http://goo.gl/bSW3L)包含了一段非常可靠的代碼,可用於必要時添加它。 – Pointy 2011-06-15 15:58:46