如何让类构造函数在nodejs中创build新实例时发出事件
我有一个类MyClass:
var MyClass = function(){ events.EventEmitter.call(this); //... }; util.inherits(MyClass, EventEmitter);
我希望它每次创buildMyClass的新实例时发出一个“新”事件:
myClassInstance = new MyClass(); // emit a 'new' event from MyClass, not myClassInstance
我想这样做,这样我就可以让观察者每创build一个MyClass的新实例就做一些事情。 例如:
var MyClass = require('myclass'); MyClass.on('new', function(newInstance) { // do something with the new instance of MyClass };
有没有办法做到这一点?
你有两个select:
第一种方法是不从MyClass发出,而是build立一个新的EventEmitter实例。
var MyClassEmitter = new events.EventEmitter(); var MyClass = function(){ MyClassEmitter.emit('new', this); };
这是我会做的方式,因为它使用最less的幻想,不可能打破。
第二种方式,直接使用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);