2

在 Node.js 文档中,我们可以看到:

var util = require("util");
var events = require("events");

function MyStream() {
    events.EventEmitter.call(this);
}

util.inherits(MyStream, events.EventEmitter);

var stream = new MyStream();

是否与以下内容相同:

function MyStream2() {
}
//MyStream2 = new events.EventEmitter; WRONG. Thank you @Esailija
MyStream2.prototype = new events.EventEmitter;

var stream2 = new MyStream2();

谢谢 :)

4

1 回答 1

7

如果我们编辑您的代码以使其正常工作,那就是:

MyStream2.prototype = new events.EventEmitter;

还是会有一些区别:

  • 在您的版本中,MyStream2.prototype.constructor === events.EventEmitterinheritsMyStream2.prototype.constructor === MyStream2

  • 您的版本调用events.EventEmitter可能有副作用的构造函数,而inherits使用Object.create不调用构造函数的函数。

  • 与链接原型之间的差异无关,但您的版本在调用子构造函数时不会调用父构造函数。function MyStream2() { events.EventEmitter.call(this); }因此,当调用子构造函数时,它仍然必须正确建立初始状态。

于 2012-12-02T20:16:51.673 回答