为什么Google Closure库中的 goog.inherits 看起来像这样:

goog.inherits = function(childCtor, parentCtor) {
  function tempCtor() {};
  tempCtor.prototype = parentCtor.prototype;
  childCtor.superClass_ = parentCtor.prototype;
  childCtor.prototype = new tempCtor();
  childCtor.prototype.constructor = childCtor;
};

而不是
goog.inherits = function(childCtor, parentCtor) {
  childCtor.superClass_ = parentCtor.prototype;
  childCtor.prototype = new parentCtor();
  childCtor.prototype.constructor = childCtor;
};
tempCtor有什么好处?

最佳答案

如果parentCtor具有一些初始化代码,并且在最坏的情况下需要某些参数,则该代码可能会意外失败。这就是为什么他们创建一个虚拟函数并从中继承的原因。

10-08 19:34