Javascript 一个对象没有';t侦听在另一个对象上发出的事件

Javascript 一个对象没有';t侦听在另一个对象上发出的事件,javascript,node.js,events,javascript-events,event-handling,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'

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

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=>一些事情发生了
    仅仅来自同一个对象,而不是另一个对象。为什么?如何让他们都能听到一些事件
  • 调用(this)events.EventEmitter.What
    events行吗?这对结果没有任何影响。取自
  • 它们是独立的事件发射对象,
    inherits()
    所做的唯一事情就是将子类的原型设置为父类的原型。子类不会神奇地链接在一起

  • events.EventEmitter.call(this)执行父级的构造函数,以允许它自己执行一些初始化(例如,设置存储事件和其他属性的事件处理程序的事件侦听器对象)。然后在
    events.EventEmitter.call之后(this)你可以在上面为你的子类执行你自己的初始化。这通常包括特定于实例的属性(例如,
    This.id=Math.random()*1000

  • 有一个响应
    o=>一些事情发生了
    仅仅来自同一个对象,而不是另一个对象。为什么?

    因为它们是不同的发射器对象。每个发射器只通知它自己的侦听器;这是一种观察者模式,而不是调停者模式

    如何让他们都能听到一些事件

    仅使用单个
    EventEmitter
    实例。您甚至可能不需要这个
    Obj
    子类,只需执行
    a=o=neweventemitter()

    调用(this)events.EventEmitter.What
    events行吗?这对结果没有任何影响


    如果你想问两个独立的问题,我可以结束第二个问题,因为……是的,找到了这个问题。yesObserver意味着你正在监听一个特定的可观测对象——你有两个,其中只有一个在发射事件。Mediator意味着您有一个全局对象,其他所有人都在该对象上侦听和/或触发事件。