只复制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.

中是不允许的