为什么Google Closure Library中的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
提供了哪些好处?
答案 0 :(得分:5)
如果parentCtor
有一些初始化代码,并且在最坏的情况下需要一些参数,那么代码可能会意外失败。这就是他们创建虚拟函数并从中继承的原因。
答案 1 :(得分:2)
关于对文字对象实例的引用的使用,它通过插入另一个函数实例将childCtor的原型与parentCtor原型的实际实例分离。
答案 2 :(得分:1)
thefourtheye 几乎回答了这个问题。第一个看起来效率更高,但如果在初始化期间只创建一个临时构造函数,则可以提高效率,而不是每次调用继承时都有一个:
goog.inherits = (function() {
function tempCtor(){}
return function(childCtor, parentCtor) {
tempCtor.prototype = parentCtor.prototype;
childCtor.superClass_ = parentCtor.prototype;
childCtor.prototype = new tempCtor();
childCtor.prototype.constructor = childCtor;
};
}());
我怀疑差异是可衡量的,它只是给你一个温暖的内在光芒,以不时地节省几个CPU周期和字节的内存。