在学习寄生组合继承的同时,我在博客中看到一个示例并感到怀疑。它是:
<script>
function inheritPrototype(subType,superType){
var o1=Object.create(superType.prototype) ;
o1.constructor = subType;
subType.prototype=o1;
}
</script>
我知道它想让subType继承superType,但是我不知道“ o1.constructor = subType;”的目的是什么。我的猜测如下:
1。Object.create的作用是:
Object.create = function(o){
var F = function (){};
F.prototype = o;
return new F();
};
由于o1是由Object.create的F创建的,因此它没有任何属性,包括构造函数。因此,这里我们需要给o1一个构造函数属性。但是如果是这样,为什么我们必须使o1.constructor指向子类型?
2。要修复构造函数。但是如果是这样,为什么不先写subType.prototype = o1然后再写o1.constructor = subType?我们修复构造函数是因为原型已经被重写了吧?
3。还有其他原因吗?
PS:问题与"Parasitic Combination Inheritance" in Professional JavaScript for Web Developers完全不同。尽管代码完全相同,但问题实际上有所不同。