Nodejs EventEmitter - 定义侦听器函数的范围

Lit*_*yte 8 javascript scope node.js eventemitter

我想要做这样的工作:

var Events=require('events'),
    test=new Events.EventEmitter,
    scope={
        prop:true
    };

test.on('event',function() {
   console.log(this.prop===true);//would log true
});
test.emit.call(scope,'event');
Run Code Online (Sandbox Code Playgroud)

但是,不幸的是,听众甚至没有被召唤.有没有办法做这个W/EventEmitter?我可以Function.bind听听,但是,我真的希望EventEmitter有一些特殊的(或明显的)方法来做到这一点......

谢谢您的帮助!

Ray*_*nos 11

不,因为this侦听器中的值是事件发射器对象.

不过你能做的就是这个

var scope = {
  ...
};
scope._events = test._events;
test.emit.call(scope, ...);
Run Code Online (Sandbox Code Playgroud)

您的事件处理程序未被调用的原因是因为所有处理程序都存储在其中,._events因此如果您复制._events它就应该工作.