在了解js的寄生組合繼承時看到了這篇博客 https://www.cnblogs.com/nullc...,對其中的一個地方不太理解。在這里粘貼一下求問:寄生組合式繼承:通過借用構造函數來繼承屬性,通過原型鏈的混成形式來繼承方法.思路:不必為了指定子類的原型而調用父類的構造函數,我們所需要的無非就是父類原型的一個副本而已.本質上,就是使用寄生式繼承來繼承父類的原型,然后在將結果指定給子類的原型:<script>function inheritPrototype(subType,superType){ var o1=Object.create(superType.prototype) ; //創建父類原型的一個副本
o1.constructor = subType; //為副本添加constructor屬性,彌補重寫原型而失去的constructor屬性
subType.prototype=o1; //將創建的對象(副本)賦值給子類的原型}Object.create = function(o){ var F = function (){};
F.prototype = o; return new F();
};</script>問題:o1.constructor = subType的作用何在?o1本質上是Object.create里的一個空的構造函數實例化出來的一個對象,所以o1是沒有任何屬性的,包括constructor屬性,這一點理解,但是不理解為什么要使o1的constructor指向subType?如果說是修正constructor的指向的話,為什么不先寫subType.prototype=o1再寫o1.constructor = subType呢?
o1.constructor = subType的作用何在?
慕少森
2019-03-11 20:36:06
