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

时间:2014-04-01 16:18:21

标签: javascript node.js constructor eventemitter

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

VS

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

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

2 个答案:

答案 0 :(得分:2)

  

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

Apparently,是的:

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的所有方法都检查它是否存在,如果你省略了调用,我不会期望太多破坏,但是我不确定将来是否成立。< / p>

答案 1 :(得分:1)

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