节点:将 EventEmitter 扩展到非原型对象

Node: extend EventEmitter to non-prototype object

我经常看到这个:

Parrot.prototype.__proto__ = EventEmitter.prototype;

有了这个,每次你建造一只新的鹦鹉,它就会发出叫声。

但是,假设我构造了一个具有函数的对象并且不打算创建多个实例:

var parrot = {
  squawk: function(whatYouSaid){
    this.emit("SQUAWK!!!!", whatYouSaid);
  }
}

我该如何扩展 EventEmitter?我试过了,但没用:

_.extend(parrot, (new EventEmitter()));

你应该extend/assignEventEmitter.prototype你的对象:

_.assign(parrot, EventEmitter.prototype);

util.inherits 是原生 api 用于在 NodeJS 中进行继承。

var EventEmitter = require('events').EventEmitter,
  util = require('util');

function Parrot(){
  EventEmitter.call(this);
  ...
}

util.inherits(Parrot, EventEmitter);

var parrot = new Parrot();

parrot.on('SQUAWK!!!!', whatYouSaid);

parrot.emit('SQUAWK!!!!', 'I said this!');

我制作了一个不同继承方式的演示:https://github.com/razvanz/nodejs-inheritance-demo