如何将匿名函数作为参数传递给现有函数,以便稍后在javascript中使用?

时间:2014-10-16 01:58:33

标签: javascript jquery anonymous-function

我正在尝试创建一个基本的javascript框架,您可以将不同的东西传递到其中,包括稍后执行的函数。现在,我处于一个更简单的测试阶段,但我无法完全调用该函数。我的代码就在这里:

[我的JS小提琴] [1] http://jsfiddle.net/mp243wm6/

我的代码有一个包含不同数据的对象,我想稍后调用该方法,但是在创建时可以使用的数据。下面是函数的代码片段,它使用传递给对象的函数:

clickMe : function() {
        this.obj.click(function() {
            this.func();
        });
    }

欢迎任何我应该阅读的建议或事项。

3 个答案:

答案 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));
}

http://jsfiddle.net/mp243wm6/2/

答案 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的东西。

JSFiddle

<强> 2。带有实际功能参考的副本

onClick : function() {
    var theFunctionReference = this.func;
    this.obj.click(function() {
        theFunctionReference();
    });
},

这样,您将不会依赖于framework.events对象上下文之外的this的值。

JSFiddle

答案 2 :(得分:0)

问题是这不是正确的对象。我建议你研究一下Function.bind(),因为它会创建一个指向正确事物的函数。