如何使用EventEmitter处理多个对象 - NodeJS

时间:2015-12-22 20:03:56

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

主文件

var DogModule = require('Dog');
var dogsList = [];

function addNewDog(){
  var newDog = new Dog();
  dogsList.push(newDog);
}

???.on('bark', function(barkSound) {
    console.log(barkSound);
});

狗文件

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

function Dog() {

    EventEmitter.call(this);

    this.name = "asda";
    this.chipId = 1234;

    this.emit('bark', "au-au");
}

Dog.prototype = {

   getName: function () {
     return this.name;
   },

   getChipId: function () {
     return this.chipId;
   }
}

问题1 - 如何正确地将EventEmitter.prototype添加到Dog对象并保存当前原型,基本上只是访问EventEmitter方法?

  • Dog.prototype = Object.create(EventEmitter.prototype);
  • 使用util模块然后使用util.inherits(Dog,EventEmitter);

这里的问题是如何不覆盖现有方法......

问题2 - 处理一个对象没有问题,但多个如何处理它们的个性,知道它们将存储在该列表中?

谢谢。

1 个答案:

答案 0 :(得分:1)

为防止重写原型,您可以使用Object.assign

util.inherits(Dog, EventEmitter);
Dog.prototype = Object.assign({
  getName: function () {
    return this.name;
  },
  getChipId: function () {
    return this.chipId;
  }
}, Dog.prototype);