如何replace节点JS事件接收器`this`
发送事件时是否可以replacethis
上下文?
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
inheritance方法:
在我的types的开始:
events.EventEmitter.call(this);
在types函数之后:
myType.prototype.__proto__ = events.EventEmitter.prototype;
但是这似乎覆盖任何与我在myType
函数中指定的上下文的emit
。 而当我需要一个不同的上下文,我不知道如何发送它。
如果您想在每次发送事件时更改上下文,则可以将包含上下文的另一个对象传递给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; });