我在JS中有一个临时事件系统,而attacher看起来像这样:
events.attach(events.NEW_TASK,this.update);
其中this.update
是回调/处理程序/函数。问题是,当调度程序试图调用此处理程序时,它会丢失它的原始上下文。如何将处理程序与调用attach函数的对象的上下文绑定,而不将this
作为参数传递并使用它?
编辑:我还应该提一下,它在某种程度上是一个框架,所以它必须对其他开发人员来说很简单,所以最好不需要将上下文存储在另一个变量中。
答案 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(); } );