Javascript中的引用对象调用函数

时间:2010-05-25 06:10:30

标签: javascript events reference

我在JS中有一个临时事件系统,而attacher看起来像这样:

events.attach(events.NEW_TASK,this.update);

其中this.update是回调/处理程序/函数。问题是,当调度程序试图调用此处理程序时,它会丢失它的原始上下文。如何将处理程序与调用attach函数的对象的上下文绑定,而不将this作为参数传递并使用它?

编辑:我还应该提一下,它在某种程度上是一个框架,所以它必须对其他开发人员来说很简单,所以最好不需要将上下文存储在另一个变量中。

3 个答案:

答案 0 :(得分:2)

使用Function.prototype.bind方法的另一个选项是新ECMAScript Standard的一部分:

events.attach(events.NEW_TASK, this.update.bind(this));

答案 1 :(得分:1)

在ECMAScript 5在浏览器中广泛采用之前,您可以使用自己的Function.prototype.bind实现:

function bind(func, thisObj) {
    return function() {
        func.apply(thisObj, arguments);
    };
}

events.attach(events.NEW_TASK, bind(this.update, this));

答案 2 :(得分:0)

您可以将“this”的引用存储在局部变量中并尝试使用它来调用该函数

var that = this;

events.attach( events.NEW_TASK, function( ) { that.update(); } );