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

对比

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

EventEmitter.call(this) 是否需要这样做?

4

2 回答 2

2

EventEmitter.call(this) 是否需要这样做?

显然,是的:

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检查它的存在,因此如果您确实省略了调用,我不会期望太多中断,但我不确定这在未来是否成立。

有足够多的其他构造函数不允许被省略,因此在构造实例时总是简单地调用构造函数是一种很好的做法。

于 2014-04-01T16:21:31.890 回答
1

util.inherits获取整个父原型,但您丢失了构造函数。因此,继承构造函数通常会以当前this作为上下文调用父构造函数,就像您在第一个示例中看到的那样。

于 2014-04-01T16:28:07.460 回答