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

本人刚开始学习js,在《js高程》上看到了寄生组合式继承这一节,但是对书上给出的代码不太明白。

我理解的是:寄生组合式继承是为了避免组合继承中实例属性和原型对象中属性重复的问题,它使用借用构造函数的方法继承父类构造函数中的属性,使用原型式继承的方法继承父类的原型对象。

这是书上的代码:


function inheritPrototype(SubType,SuperType){

    var pro = Object.create(SuperType.prototype);

    pro .constructor = SubType;

    SubType.prototype = pro ;

    }

但是,它和下面的函数有什么区别呢?


function inheritPrototype(SubType,SuperType){

    SubType.prototype = SuperType.prototype;

    SubType.prototype.constructor = SubType;

    }

不太明白为什么要使用原型式继承的方法继承父类的原型,原型式继承不就是一个浅复制吗?这和直接赋值有什么区别呢?


青春有我
浏览 431回答 2
2回答

智慧大石

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

倚天杖

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

相关分类

JavaScript