1

我有一个班级 MyClass:

var MyClass = function(){
  events.EventEmitter.call(this);
  //...
};
util.inherits(MyClass, EventEmitter);

我希望它在每次创建 MyClass 的新实例时发出一个“新”事件:

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
};

有没有办法做到这一点?

4

1 回答 1

1

你有两个选择:

第一种方法是从 MyClass 发出,而是创建一个新的 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);
于 2013-01-16T07:02:33.763 回答