一尘不染

这两种构造器模式有什么区别?

node.js

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

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

是否有EventEmitter.call(this)所需的功能?


阅读 236

收藏
2020-07-07

共1个答案

一尘不染

是否有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检查其是否存在,因此,如果您忽略了调用,我希望不会有太大的改变,但是我不确定将来是否成立。

有迹象表明,做足够多的其他构造 容忍被省略,所以这是很好的做法,只是 始终 构造一个实例时调用构造函数。

2020-07-07