我有一个MyClass类:
var MyClass = function(){
events.EventEmitter.call(this);
//...
};
util.inherits(MyClass, EventEmitter);
我希望每次创建一个新的MyClass实例时它都会发出一个'new'事件:
myClassInstance = new MyClass(); // emit a 'new' event from MyClass, not myClassInstance
我想这样做,这样我就可以让一个观察者在创建一个新的MyClass实例时做一些事情。例如:
var MyClass = require('myclass');
MyClass.on('new', function(newInstance) {
// do something with the new instance of MyClass
};
有办法吗?
答案 0 :(得分:1)
您有两种选择:
第一种方法是从emClass中不发出,而是创建一个新发送的EventEmitter实例。
var MyClassEmitter = new events.EventEmitter();
var MyClass = function(){
MyClassEmitter.emit('new', this);
};
这就是我要这样做的方式,因为它使用最少的幻想并且不太可能破坏。
第二种方式,直接使用MyClass
,您需要将EventEmitter行为混合到构造函数中。
var MyClass = function(){
MyClass.emit('new', this);
};
// Mix functions directly onto function.
Object.keys(events.EventEmitter.prototype).forEach(function(prop){
MyClass[prop] = events.EventEmitter.prototype[prop];
});
// Trigger constructor in MyClass context.
events.EventEmitter.call(MyClass);