0

我有一个继承自 EventEmiter“类”的对象。

它有很多事件 ( emitter.on),我不知道它们的名字。
我怎样才能得到他们的名字?我该如何处理所有事件?

4

2 回答 2

2

您无法以编程方式获取将在特定事件发射器上发射的所有可能事件。但是,您可以通过阅读源代码来做到这一点。

据我所知,在运行时处理所有事件的唯一方法是覆盖emit那个 EventEmitter 的函数。然后,只要发出事件,就会调用您的代码,您可以将其转发给原始函数。

var EventEmitter = require("events").EventEmitter

var emitter = new EventEmitter();

emitter.on('test', function(t) {
    console.log('Handled test', t);
});

var old_emit = emitter.emit;
emitter.emit = function() {
    console.log("Intercepted", arguments);
    old_emit.apply(emitter, arguments);
}

emitter.emit('test', 'hi');
emitter.emit('something', 'else');

演示:http: //ideone.com/RfqFvx

于 2013-07-11T11:42:14.767 回答
1

EventEmitter 也有自己的事件,其中之一:newListener,添加新的监听器时将传递事件名称和回调函数。

此外,您可以使用emitter.listeners以获取特定事件名称的回调函数列表。

您可能希望使用一个事件名称,并发送带有对象名称标识的对象,这样您就可以拥有一个事件,但对它的响应不同。

于 2013-07-11T11:37:19.727 回答