js继承的五种方式

1.子类的原型指向父类的一个实例

缺点:1.子类继承的是父类的一个实例,如果父类的的某个属性是引用类型的将会被子类所共用;

   2.子类继承的是父类的一个实例,创建有这个实例的时候无法向父类传参;

如图:

2.通过call或apply改变函数的this指向,在子类的构造函数中,将父类的方法调用一次,继承父类的共有属性

缺点:1.不涉及原型prototype。父类原型上的方法不会被子类继承

   2.每次创建一个子类实例,都回拥有一份各自的方法与属性,不符合代码的复用原则

如:skil() 是父类原型上的方法,这种方式是无法继承的

 3.混合继承方法,在子类的构造函数中,调用一次父类的构造函数,再将子类的原型指向父类的一个实例

结果:

总结:综合实例继承和构造继承的优点,同时规避了,引用类型共用,原型上的方法不能继承的缺点

不足:在继承父类实例以及实例化子类的时候,都要调用一次父类的方法

4.寄生式继承,实质是对类继承的一种封装

结果:

结论:寄生继承是对类继承的一种封装,存在着引用类型共享的问题

5.寄生组合式继承,寄生组合继承,将子类直接接触父类的原型

结果:

总结:通过构造继承以及寄生继承,构造继承为了能让在实例子类的时候能向父类传递参数,通过寄生继承,将子类的prototype直接指向父类的

的原型,避免实例一次父类,造成多调用一次父类的构造函数,方法完美,唯一缺点比较麻烦,不容易读懂。

猜你喜欢

转载自www.cnblogs.com/kong-bai/p/9350091.html