一个对象不会侦听另一个对象上发出的事件

时间:2014-10-02 05:06:28

标签: javascript node.js events javascript-events event-handling

尝试使对象发送和接收事件:

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');

2 个答案:

答案 0 :(得分:0)

  1. 它们是单独的事件发射对象,inherits()唯一能做的就是将子类的原型设置为父类原型的原型。子类并没有神奇地链接在一起。

  2. 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?