如何让类构造函数在nodejs中创建新实例时发出事件

时间:2013-01-16 06:22:35

标签: javascript node.js eventemitter

我有一个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
};

有办法吗?

1 个答案:

答案 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);