1

私はクラス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
};

それを行う方法はありますか?

4

1 に答える 1

1

2つのオプションがあります。

最初の方法は、MyClassから発行せ、代わりに発行する新しいEventEmitterインスタンスを作成することです。

var MyClassEmitter = new events.EventEmitter();
var MyClass = function(){
  MyClassEmitter.emit('new', this);
};

これは私が行う方法です。なぜなら、それは最も空想性を使用せず、壊れにくいからです。

2番目の方法は、を直接操作して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 に答える