只复制EventEmitter的原型是Nodejs中继承EventEmitter的好方法
Is copying only the prototype of EventEmitter is a good way of inheriting EventEmitter in Nodejs
我一直在读 Nodejs in practice
这本书,直到我看到这个例子:
var EventEmitter = require('events').EventEmitter;
function MusicPlayer(track) {
this.track = track;
this.playing = false;
for (var methodName in EventEmitter.prototype) {
this[methodName] = EventEmitter.prototype[methodName];
}
}
作者写道:“这个例子可能看起来有点做作,但有时复制 EventEmitter 的属性而不是以通常的方式继承它确实很有用。这种方法
更类似于 mixin 或多重继承;请参阅以下清单中的演示。“。但我就是不明白。
虽然这个例子很有魅力,但我还是忍不住弄清楚在 Js 中继承 classes 是否是一个“好的做法”,因为作者只复制了 prototype
属性 的 EventEmitter class 并完全忽略在 EventEmitter 构造函数内部实例化的属性为了 运行?
假设EventEmitterprototype
内部的所有方法都是独立的,像作者在上面的例子中那样在Js中继承classes是不是一个“好习惯”?
Node.js docs 中的 EventEmitter 部分给出以下示例:
const EventEmitter = require('events');
class MyEmitter extends EventEmitter {}
const myEmitter = new MyEmitter();
myEmitter.on('event', () => {
console.log('an event occurred!');
});
myEmitter.emit('event');
因此可以肯定地说这是推荐的方法。 Prototypical inheritance作者推荐的方法是老办法,现在不提倡了。
看来作者想说的是,在需要多重继承的时候,这样继承是好的,这在JavaScript.
中是不允许的
我一直在读 Nodejs in practice
这本书,直到我看到这个例子:
var EventEmitter = require('events').EventEmitter;
function MusicPlayer(track) {
this.track = track;
this.playing = false;
for (var methodName in EventEmitter.prototype) {
this[methodName] = EventEmitter.prototype[methodName];
}
}
作者写道:“这个例子可能看起来有点做作,但有时复制 EventEmitter 的属性而不是以通常的方式继承它确实很有用。这种方法 更类似于 mixin 或多重继承;请参阅以下清单中的演示。“。但我就是不明白。
虽然这个例子很有魅力,但我还是忍不住弄清楚在 Js 中继承 classes 是否是一个“好的做法”,因为作者只复制了 prototype
属性 的 EventEmitter class 并完全忽略在 EventEmitter 构造函数内部实例化的属性为了 运行?
假设EventEmitterprototype
内部的所有方法都是独立的,像作者在上面的例子中那样在Js中继承classes是不是一个“好习惯”?
Node.js docs 中的 EventEmitter 部分给出以下示例:
const EventEmitter = require('events');
class MyEmitter extends EventEmitter {}
const myEmitter = new MyEmitter();
myEmitter.on('event', () => {
console.log('an event occurred!');
});
myEmitter.emit('event');
因此可以肯定地说这是推荐的方法。 Prototypical inheritance作者推荐的方法是老办法,现在不提倡了。
看来作者想说的是,在需要多重继承的时候,这样继承是好的,这在JavaScript.
中是不允许的