我正在尝试创建一个基本的javascript框架,您可以将不同的东西传递到其中,包括稍后执行的函数。现在,我处于一个更简单的测试阶段,但我无法完全调用该函数。我的代码就在这里:
[我的JS小提琴] [1] http://jsfiddle.net/mp243wm6/
我的代码有一个包含不同数据的对象,我想稍后调用该方法,但是在创建时可以使用的数据。下面是函数的代码片段,它使用传递给对象的函数:
clickMe : function() {
this.obj.click(function() {
this.func();
});
}
欢迎任何我应该阅读的建议或事项。
答案 0 :(得分:1)
问题在于有两种不同的背景:
clickMe : function() {
// here is one
this.obj.click(function() {
// here is another
this.func();
});
}
您可以简单地将函数作为参数传递,如下所示:
clickMe : function() {
this.obj.click($.proxy(this.func, this));
}
答案 1 :(得分:1)
问题:
考虑到你在JSFiddle中的代码,你有:
onClick : function() {
this.obj.click(function() {
this.func();
});
},
如上所述,你在这里有不同的背景。
考虑代码段this.obj.click(function() { this.func(); })
。这里的第一个this
是对framework.events对象的引用。这里的第二个this
是对调用此函数时this
的任何内容的引用。对于JSFiddle,当调用this.func
时,this
实际上是表示<div id="test">TEST</div>
节点的DOM对象。由于它没有func
函数,因此调用func()
会导致:
未捕获的TypeError:undefined不是函数
您必须了解以下内容:您必须传递要在其中调用函数this
的正确func
。
解决方案:
有两种方法可以让它按照您的意愿运作:
<强> 1。 with bind
this.obj.click(this.func.bind(this));
这样,你告诉我们:&#34;调用我的this.func
函数,但要确保使用我作为参数传递的this
来调用它#34;。 Vanilla JS,没有$ .proxy的东西。
<强> 2。带有实际功能参考的副本
onClick : function() {
var theFunctionReference = this.func;
this.obj.click(function() {
theFunctionReference();
});
},
这样,您将不会依赖于framework.events对象上下文之外的this
的值。
答案 2 :(得分:0)
问题是这不是正确的对象。我建议你研究一下Function.bind(),因为它会创建一个指向正确事物的函数。