尝试使对象发送和接收事件:
var events = require('events'),
util = require('util');
function Obj(){
events.EventEmitter.call( this ); // what does this line?
}
util.inherits( Obj, events.EventEmitter );
var o = new Obj(),
a = new Obj();
a.on('some', function () {
console.log('a => some-thing happened');
});
o.on('some', function () {
console.log('o => some-thing happened');
});
o.emit('some');
o => some-thing happened
,而不是另一个。为什么?以及如何使他们都听some
事件?events.EventEmitter.call( this );
行的作用是什么?它对结果没有任何影响。取自http://nodejs.org/api/util.html#util_util_inherits_constructor_superconstructor 答案 0 :(得分:0)
它们是单独的事件发射对象,inherits()
唯一能做的就是将子类的原型设置为父类原型的原型。子类并没有神奇地链接在一起。
events.EventEmitter.call( this );
执行父构造函数以允许它自己执行某些初始化(例如,设置存储事件和其他属性的事件处理程序的事件侦听器对象)。然后在events.EventEmitter.call( this );
之后,您可以在子类上执行自己的初始化。这通常包括特定于实例的属性(例如this.id = Math.random() * 1000
);
答案 1 :(得分:0)
仅从同一个对象获得响应
o => some-thing happened
,而不是另一个。为什么呢?
因为它们是不同的发射器对象。每个发射器只通知自己的听众;它是一个观察者模式,而不是一个中介者。
如何让他们聆听
some
事件?
仅使用一个EventEmitter
实例。您可能甚至不需要Obj
子类,只需执行a = o = new EventEmitter()
。
events.EventEmitter.call( this );
行的作用是什么?它对结果没有任何影响。
请参阅What is the difference between these two constructor patterns?