js继承
实现继承首先要提供一个父类
一、原型链继承
利用原型让一个引用类型继承另一个引用类型的属性和方法。
优点:简单易于实现
缺点:无法向父函数传参,函数不能复用
二、借用构造函数
在子类型的构造函数中调用超类型构造函数。
优点:可以向父函数传参,解决了实例被共享的问题
缺点:无法复用,不能继承原型属性或方法
三、原型式继承
借助原型可以基于已有的对象创建新对象,同时还不必因此创建自定义类型。
优点:不限制调用方式
缺点:无法实现复用,实例会被共享
四、组合式继承
使用原型链实现对原型的属性和方法的继承,通过借用构造函数来实现对实例属性的继承,既通过在原型上定义方法来实现了函数复用,又保证了每个实例都有自己的属性。
优点:函数可以复用,可以向超类传递参数
缺点:调用了两次父类
五、寄生式继承
创建一个仅用于封装继承过程的函数, 该函数在内部已某种方式来增强对象,最后再像真地是它做了所有工作一 样返回对象。
缺点:不能函数复用故效率低下,实例会被共享
六、寄生组合式继承
即通过借用构造函数来继承属性,通过原型链的混成形式来继承方法,通过寄生的方式来修复组合式继承的不足,完美的实现继承
优点:只调用了一次父函数,效率更高。与其同时,原型链还能保持不变。因此寄生组合继承是引用类型最理性的继承范式。
七、es6继承
代码量少,易懂
//创建A类
class A{
constructor(){
//这里构造函数代码,new的时候自动执行
}
方法1(//A类的方法)
方法2(//A类的方法)
}
//创建B类并继承A类
class B extends A{
constructor(){
super()//这里表示父类
}
}
//最后实例化B
var b=new B()
b.方法1()