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

Javascript 如何使用EventEmitter-NodeJS处理多个对象,javascript,node.js,events,event-handling,eventemitter,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').EventEmi

主文件

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-处理一个对象没有问题,但对于多个对象,我如何处理它们,知道它们将存储在该列表中


谢谢。

为了防止重写原型,您可以使用
对象。分配

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

对于继承,请遵循扩展EventEmitter的标准节点文档:正如我前面所说的,问题是使用util.inherits(Dog,EventEmitter)(与文档一样)覆盖对象原型的现有方法`首先,然后像在
Dog.prototype.getName=function(){}
中那样分别添加每个方法,这样就不会覆盖以前的原型。这样做会覆盖以前的任何
Dog.prototype
,所以不要这样做。我知道,但是当对象有大约100个方法时,重新格式化整个原型有点痛苦。这就是为什么我希望有一个更有效的解决方案。你可以将一个充满方法的对象与原型合并。很好的发现,它是ES6新功能的一部分!顺便说一句,你对问题2有什么想法?首先是好奇:p