【发布时间】:2015-12-22 20:03:56
【问题描述】:
主文件
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 - 处理一个对象没问题,但对于多个对象,我如何处理它们的个性,知道它们将存储在该列表中?
谢谢。
【问题讨论】:
-
对于继承,请遵循关于扩展 EventEmitter 的标准 Node 文档:nodejs.org/api/events.html#events_inheriting_from_eventemitter
-
正如我上面所说的问题是使用 util.inherits(Dog, EventEmitter) (如文档中所述)覆盖对象原型的现有方法。
-
您首先放置 `util.inherits(Dog, EventEmitter)`,然后像
Dog.prototype.getName = function() {}一样单独添加每个方法,这样就不会覆盖之前的原型。这样做Dog.prototype = {...}会覆盖之前的Dog.prototype,所以不要这样做。 -
Tbh 我知道,但是当对象有大约 100 个方法时,重新格式化整个原型有点痛苦。这就是为什么我问希望有一个更有效的解决方案。
-
您可以将一个充满方法的对象与原型合并。
标签: javascript node.js events event-handling eventemitter