这是extend
Pro Javascript Design Patterns, Apress, 2008, p.44 中的定义:
function extend(subClass, superClass) {
var F = function() {};
F.prototype = superClass.prototype;
subClass.prototype = new F();
subClass.prototype.constructor = subClass;
subClass.superclass = superClass.prototype;
if(superClass.prototype.constructor == Object.prototype.constructor) {
superClass.prototype.constructor = superClass;
}
}
对于这条线subClass.superclass = superClass.prototype;
,我认为如果我们这样做可能是一样的subClass.superclass = superClass
,因为在未来,我们总是可以通过任何方式到达原型subClass.superclass.prototype
。但是我想为什么不指向构造函数,而是指向原型呢?但这是一个小问题。
更重要的问题是,为什么最后几行试图将 Object 的原型的构造函数设置回 self?我在 Firefox 和 Chrome 中尝试过,他们总是这样指出。
还有一点奇怪的是,它为什么要使用if(superClass.prototype.constructor == Object.prototype.constructor)
?为什么不直接使用if (superClass === Object)
呢?