node.js util.inherits vs new

时间:2012-12-02 20:10:13

标签: node.js

On the Node.js documentation我们可以看到:

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();

谢谢:)

1 个答案:

答案 0 :(得分:7)

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

MyStream2.prototype = new events.EventEmitter;

仍然会有一些差异:

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

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

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