Node.js 如何为Node JS事件接收器替换“this”?

Node.js 如何为Node JS事件接收器替换“this”?,node.js,eventemitter,Node.js,Eventemitter,发送事件时是否可以替换此上下文 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继承方法: 在“我的类型”的开头: eve

发送事件时是否可以替换此上下文

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;

但这似乎用我在
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;
});

因此为了澄清,您希望事件处理程序中的
this
是在
emit
调用中选择(传递)的对象?@RayToal,是的,我希望自定义对象作为
this
上下文传递到
上的
处理程序中。很有趣,但它与我目前找到的其他信息有点矛盾:好,我现在更了解你的代码了,这绝对不是我想要的。这与你找到的答案并不矛盾。问题是
环境提交程序
自动绑定到侦听器函数。我的包装器将处理程序绑定到作为第二个参数传递给发射器的任何对象。但是,我强烈建议不要使用该解决方案,因为所做的事情完全没有文档记录为什么不呢?我的代码将处理程序的上下文绑定到您想要的任何对象。官方文档可能不支持该代码,但它可以工作。你的例子没有抓住问题的关键——自动提供
这个
上下文。