如何将匿名函数作为参数传递给现有函数,以便稍后在javascript中使用
How can you pass anonymous functions as parameters to existing functions to use later in javascript?
我正在尝试创建一个基本的javascript框架,您可以将不同的东西传递到其中,包括稍后执行的函数。现在,我正处于一个更简单的测试阶段,但我无法让函数调用正常工作。我的一段代码在这里:
[My JS Fiddle][1]http://jsfiddle.net/mp243wm6/
我的代码有一个包含不同数据的对象,我想稍后调用该方法,但要使用创建时可用的数据。以下是使用传递给对象的函数的函数的代码片段:
clickMe : function() {
this.obj.click(function() {
this.func();
});
}
欢迎任何我应该阅读的建议或内容。
问题是有两种不同的上下文:
clickMe : function() {
// here is one
this.obj.click(function() {
// here is another
this.func();
});
}
您可以简单地将函数作为参数传递,如下所示:
clickMe : function() {
this.obj.click($.proxy(this.func, this));
}
http://jsfiddle.net/mp243wm6/2/
问题:
考虑到您在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()
会导致:
未捕获类型错误:未定义不是函数
您必须理解以下内容:您必须传递正确的this
,您希望在其中调用函数func
。
解决方案:
有几种方法可以让它按你的意愿工作:
1.绑定
this.obj.click(this.func.bind(this));
通过这种方式,您可以告诉:"调用我的this.func
函数,但请确保它将使用我作为参数传递的this
进行调用"。香草JS,没有$.proxy的东西。
JSFiddle
2.带有实际功能参考的副本
onClick : function() {
var theFunctionReference = this.func;
this.obj.click(function() {
theFunctionReference();
});
},
这样,就不会在framework.events对象的上下文之外依赖this
的值。
JSFiddle
问题是它没有绑定到正确的对象。我建议您研究Function.bind(),因为它创建了一个指向正确内容的函数。
- 从函数JavaScript返回不可变数组/对象
- 将对象传递给函数.JavaScript
- 如何定义const函数javascript(语法糖)
- 新的日期函数javascript
- TypeError:this.getAttribute不是一个函数-javascript
- 从函数javascript发送变量
- 扩展自容器函数Javascript
- 从内部函数javascript内部分配外部函数的对象
- 使用函数JavaScript中的函数
- 在这里使用回调函数(JavaScript)有什么好处吗
- 来自函数 Javascript 的 NaN 返回值 ||函数执行顺序
- 将“e”传递给一个新函数 - javascript
- 调用函数中的一个函数——Javascript
- 传递的变量不适用于我的函数-Javascript
- 如何将类方法设置为等于多个函数?-Javascript
- 显示php中的函数javascript
- 如何使用php代码创建函数Javascript弹出框
- 未调用的外部函数-javascript
- 如何在类中运行函数.Javascript
- 关闭mouseover上的一个函数——Javascript,jQuery