JS继承的六种方式

tech2022-08-17  145

1,原型链继承

核心: 将父类的实例作为子类的原型


原型链继承的基本思想是利用原型让一个引用类型继承另一个引用类型的属性和方法 将构造函数的原型设置为另一个构造函数的实例对象,这样就可以继承另一个原型对象的所有属性和方法,可以继续往上,最终形成原型链


优点: 简单易于实现,父类的新增的实例与属性子类都能访问 缺点: 可以在子类中增加实例属性,如果要新增加原型属性和方法需要在new 父类构造函数的后面 无法实现多继承 创建子类实例时,不能向父类构造函数中传参数

2,构造函数实现继承

使用父类的构造函数来增强子类实例,等于是复制父类的实例属性给子类(没用到原型)


优点: 解决了原型链继承中,子类实例共享父类引用属性的问题 创建子类实例时,可以向父类传递参数 可以实现多继承(call或者appl多个父类对象) 缺点: 方法都在构造函数中定义,无法复用 不能继承原型属性/方法,只能继承父类的实例属性和方法

3,组合继承(原型链 + 借用构造函数)

组合继承指的是将原型链和借用构造函数技术组合到一块,从而发挥二者最大的优点的一种继承模式 基本思路:使用原型链实现对原型属性和方法的继承,通过借用构造函数来实现对实例属性的继承


优点: 函数可以复用 不存在引用属性问题 可以继承属性和方法,并且可以继承原型的属性和方法 缺点: 由于调用了两次父类,所以产生了两份实例

4,原型式继承

不自定义类型的情况下,临时创建一个构造函数,借助已有的对象作为临时构造函数的原型,然后在此基础实例化对象,并返回。


缺点: 同原型链实现继承一样,包含引用类型值的属性会被所有实例共享。

5,寄生式继承

寄生式继承是与原型式继承紧密相关的一种思路。寄生式继承的思路 与寄生构造函数和工厂模式类似,即创建一个仅用于封装继承过程的函数,该函数在内部已某种方式来增强对象,最后再像真地是它做了所有工作一 样返回对象。 在考虑对象而不是自定义类型和构造函数的情况下,寄生式继承也是一种有用的模式。


缺点: 使用寄生式继承来为对象添加函数,会由于不能做到函数复用而效率低下。 •同原型链实现继承一样,包含引用类型值的属性会被所有实例共享。

6,寄生组合式继承

寄生组合式继承,即通过借用构造函数来继承属性,通过原型链的混成形式来继承方法 通过寄生的方式来修复组合式继承的不足,完美的实现继承


寄生组合式继承的基本模式如下所示: •第一步:创建超类型原型的一个副本 •第二步:为创建的副本添加 constructor 属性 •第三步:将新创建的对象赋值给子类型的原型


优点:寄生组合继承是引用类型最理性的继承范式

7,ES6实现继承

es6继承是使用关键字先创建父类的实例对象this,最后在子类class中修改this es6中很多代码的语法糖,很多方法简单易用。在浏览器兼容的情况下,改变原有方式。 优点: 代码量少,易懂

最新回复(0)