2011-06-15 96 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