这两个构造函数模式有什么区别?

Function ConstrA () { EventEmitter.call(this); } util.inherits(ConstrA, EventEmitter); 

VS

 Function ConstrA() {} util.inherits(ConstrA, EventEmitter); 

EventEmitter.call(这个)有什么需要的吗?

EventEmitter.call(这个)有什么需要的吗?

显然 ,是的:

 function EventEmitter() { EventEmitter.init.call(this); } … EventEmitter.init = function() { this.domain = null; if (EventEmitter.usingDomains) { // if there is an active domain, then attach to it. domain = domain || require('domain'); if (domain.active && !(this instanceof domain.Domain)) { this.domain = domain.active; } } this._events = this._events || {}; this._maxListeners = this._maxListeners || undefined; }; 

由于所有使用._events的方法都会检查它的存在,如果你忽略了这个调用,我不会期望有太多的突破,但是我不确定在将来这是否成立。

有足够的其他构造函数不允许被忽略,因此在构造实例时总是调用构造函数是一个很好的习惯。

util.inherits抓取整个父级原型,但是失去了构造函数。 由于这个原因,inheritance构造函数经常会调用父构造函数,并将当前this作为上下文,就像你在第一个例子中看到的一样。