节点:将 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。
我经常看到这个:
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。