一尘不染

Nodejs EventEmitter-定义侦听器功能的范围

node.js

我想做些类似的工作:

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');

但是,不幸的是,听众甚至没有得到呼叫。有EventEmitter有什么办法吗?我可以Function.bind听一下,但是,我真的希望EventEmitter有一些特殊的(或显而易见的)方法可以做到这一点…

谢谢您的帮助!


阅读 229

收藏
2020-07-07

共1个答案

一尘不染

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

但是,您可以做的是

var scope = {
  ...
};
scope._events = test._events;
test.emit.call(scope, ...);

未调用事件处理程序的原因是因为所有处理程序都存储在其中,._events因此如果._events在其上进行复制应该可以工作。

2020-07-07