猿问

JS中寄生组合式继承中为什么要使用原型式继承的方法继承父类的原型呢?

本人刚开始学习js,在《js高程》上看到了寄生组合式继承这一节,但是对书上给出的代码不太明白。我理解的是:寄生组合式继承是为了避免组合继承中实例属性和原型对象中属性重复的问题,它使用借用构造函数的方法继承父类构造函数中的属性,使用原型式继承的方法继承父类的原型对象。这是书上的代码:
functioninheritPrototype(SubType,SuperType){
varpro=Object.create(SuperType.prototype);
pro.constructor=SubType;
SubType.prototype=pro;
}
但是,它和下面的函数有什么区别呢?
functioninheritPrototype(SubType,SuperType){
SubType.prototype=SuperType.prototype;
SubType.prototype.constructor=SubType;
}
不太明白为什么要使用原型式继承的方法继承父类的原型,原型式继承不就是一个浅复制吗?这和直接赋值有什么区别呢?
翻阅古今
浏览 744回答 2
2回答

回首忆惘然

上面的代码,如果你在SubType的原型上增加方法,比如:SubType.prototype.fn=function(){...}这样不会影响到SuperType.prototype。下面的代码就会。

达令说

你说的是修改构造函数继承+原型对象继承的方法吧二者如果单独使用的话都会有缺点,比如你单独使用原型对象继承那么缺点就是没办法传参我们知道修改构造函数继承是通过改变this指向完成继承但,你再比如单独使用修改构造函数继承那么原型对象上的方法就没办法取到了所以组合继承是取其精华,去其糟粕的方法
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答