node.js util.inherits vs new

Sam*_*Sam 2 node.js

在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();
Run Code Online (Sandbox Code Playgroud)

它是否相同:

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

var stream2 = new MyStream2();
Run Code Online (Sandbox Code Playgroud)

谢谢 :)

Esa*_*ija 7

如果我们编辑您的代码是有效的,那就是:

MyStream2.prototype = new events.EventEmitter;
Run Code Online (Sandbox Code Playgroud)

仍然会有一些差异:

  • 在您的版本中MyStream2.prototype.constructor === events.EventEmitter,有inherits,MyStream2.prototype.constructor === MyStream2

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

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