javascript - 为什么在进行 Javascript 继承时要创建一个临时构造函数?

标签 javascript prototype google-closure-library

为什么 goog.inherits来自 Google Closure Library 看起来像这样:

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 有一些初始化代码,并且在最坏的情况下需要一些参数,那么代码可能会意外失败。这就是他们创建虚拟函数并从中继承的原因。

关于javascript - 为什么在进行 Javascript 继承时要创建一个临时构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23239285/

相关文章:

c++ - 如何将 emscripten 与闭包工具结合使用

javascript - 模糊事件不起作用时会出现错误

javascript - 如何连接多个 JavaScript 对象的属性

javascript - Protobuf 通过 Zeromq/zwssock 到 JSMQ/ProtoBuf.js 消息未完全收到

Angularjs:如何扩展 Javascript 类?

html - 如何在完全离线的工作空间中设置 LimeJS

javascript - 将 Isotope.js 与 React 结合使用来创建带过滤器的砌体布局?

javascript - 扩展原型(prototype)而不是声明整个对象的优点

javascript 对原型(prototype)函数的引用在构造函数中未定义

javascript - 闭包库 ondevicemotion 从未触发