Javascript Node.js-在注册侦听器时侦听

Javascript Node.js-在注册侦听器时侦听,javascript,node.js,eventemitter,Javascript,Node.js,Eventemitter,在Node.js中,我们有标准的事件发射器: const EE = require('events'); const ee = new EE(); ee.on('x', function(){ }); 我想做的是,当客户机注册一个侦听器时侦听。这样做的目的是,如果发射器处于特定状态,它将在注册时采取行动 需要说明的是,当调用ee.on()时,对于特定事件“x”,我想采取一些措施 如果不在Node.js中对所有事件发射器进行monkey修补,我如何做到这一点 如果我执行以下操作,我是在修补

在Node.js中,我们有标准的事件发射器:

const EE = require('events');

const ee = new EE();

ee.on('x', function(){

});
我想做的是,当客户机注册一个侦听器时侦听。这样做的目的是,如果发射器处于特定状态,它将在注册时采取行动

需要说明的是,当调用
ee.on()
时,对于特定事件“x”,我想采取一些措施

如果不在Node.js中对所有事件发射器进行monkey修补,我如何做到这一点

如果我执行以下操作,我是在修补原型方法还是实例方法

let on = ee.on;

ee.on = function(){
    if(ee.y === true){
      process.next(function(){
        ee.emit('done');
      });
    }
    return on.apply(ee, arguments);
};
这当然与:

   let on = ee.on;

    ee.on = function(){
        if(this.y === true){
          process.next(() => {
            this.emit('done');
          });
        }
       return on.apply(this, arguments);
    };

我认为这会奏效,但我不确定。我认为这只会影响一个特定的事件发射器,而不是所有的事件发射器,因为它不会改变原型…

您可以监听一个
newListener
事件:

在将侦听器添加到其内部侦听器数组之前,EventEmitter实例将发出自己的“newListener”事件


请参阅。

您可以侦听
newListener
事件:

在将侦听器添加到其内部侦听器数组之前,EventEmitter实例将发出自己的“newListener”事件


请参阅。

要复制相同的行为,您应该创建一个新的类/原型,所有其他实例都将从中继承

编辑:

:
var Util=require('Util');
const EventEmmiter=require('events');
//这里有私人数据
...
//公共数据如下
module.exports=MyClass;
函数MyClass(){
...
}
Util.inherits(MyClass,EventEmmiter);
MyClass.prototype.mymethod=函数(){
someobj.on('somevent',()=>{
...
如果(测试条件正常){
this.emit('myeventname');
}
});
}
:
var MyClass=require('./file_my_class.js');
var myclass_instance=new myclass();
myclass_实例。mymethod();
myclass_instance.on('myeventname',()=>{
//做点什么
});

要复制相同的行为,您应该创建一个新的类/原型,所有其他实例都将从中继承

编辑:

:
var Util=require('Util');
const EventEmmiter=require('events');
//这里有私人数据
...
//公共数据如下
module.exports=MyClass;
函数MyClass(){
...
}
Util.inherits(MyClass,EventEmmiter);
MyClass.prototype.mymethod=函数(){
someobj.on('somevent',()=>{
...
如果(测试条件正常){
this.emit('myeventname');
}
});
}
:
var MyClass=require('./file_my_class.js');
var myclass_instance=new myclass();
myclass_实例。mymethod();
myclass_instance.on('myeventname',()=>{
//做点什么
});

@AlexanderMills检查上面的编辑。清除或需要更多输入?@AlexanderMills检查上面的编辑。清除或需要更多输入?
<file_my_class.js>:
var   Util = require('util');
const EventEmmiter = require('events');

// private data goes here
...

// public data follows
module.exports = MyClass;

function MyClass() {
...
}

Util.inherits (MyClass, EventEmmiter);

MyClass.prototype.mymethod = function () {
    someobj.on('somevent', () => {
        ...
        if (test_condition_ok) {
           this.emit ('myeventname');
        }
    });
}

<main.js>:

var MyClass = require('./file_my_class.js');
var myclass_instance = new MyClass();

myclass_instance.mymethod();

myclass_instance.on('myeventname', () => {
      // Do Something
   });