发送活动时是否可以替换this
上下文?
var that = {}, obj = new myType();
// how to pass `that` as the calling context?
obj.emit('myEvent', data);
obj.on('myEvent', function () {
// I need it to arrive with `this`=`that`
});
我正在使用标准EventEmitter
继承方法:
在我的类型的开头:
events.EventEmitter.call(this);
遵循类型函数:
myType.prototype.__proto__ = events.EventEmitter.prototype;
但是这似乎覆盖了我在emit
函数中指定的任何上下文的任何myType
。当我需要一个不同的this
上下文时,我无法弄清楚如何发送它。
答案 0 :(得分:0)
如果要在每次发送事件时更改上下文,可以将包含上下文的另一个对象传递给emit函数。然后我们可以编写一个包装器函数,它自动将新上下文绑定到处理程序。
例如:
function withContext(fn) {
return function(data, context) {
return fn.call(that, data);
}
}
// how to pass `that` as the calling context?
obj.emit('event_1', data, context_1);
obj.emit('event_2', data, context_2);
obj.on('event_1, withContext(handler_1));
obj.on('event_2', withContext(function(data) {
this === that // true;
});