js如何实现继承(常用)

1.使用对象冒充:
js如何实现继承(常用)_第1张图片
理解:
在本构造函数中将其他构造函数视为本类的一个属性,并执行,从而实现了对超类的拷贝
优点:
简单直接,思路清晰,可以实现多重继承,体现了类似Java等语言面向对象的原理
缺点:
由于将其他构造函数的属性和方法嵌套到本类来,难免会发生属性和方法冲突,由于程序是自上到下运行的,先定义的同名的属性和方法会被覆盖掉。

2.使用es6 class关键字实现
js如何实现继承(常用)_第2张图片
理解:
使用class / expends / super 关键字模拟Java等语言面向对象的原理,实现继承,本质上是对原型继承的封装与改写,形式更加纯正。
优点:
形式体现了面向对象的风格,易于理解
缺点:
只能在es6中使用,配合js其他语法(如对象扩展符,原型方法等)容易产生混淆和误解

3.构造函数绑定
js如何实现继承(常用)_第3张图片
理解:
改变超类的执行环境,在基类实例的运行环境中运行,使得基类实例拥有超类构造函数的所有方法和属性。
优点:
代码简洁,可以在call或apply方法中传参,获取超类非预定义属性(有传入变量决定属性)
缺点:
基类无法继承超类原型上的方法,属性和方法继承会出现覆盖问题。

4.原型继承
js如何实现继承(常用)_第4张图片
理解:
改变基类的原型,指向超类的实例,进而实现继承。
优点:
各类js继承的核心和晕头,是js语言的灵魂之处;基类可以获得超类原型上的属性和方法;可以向超类原型中传参。
缺点:
理解难度高;无法实现多重继承(基类prototype只能绑定为一个超类的实例);注意属性和方法的覆盖问题;原型继承将会因为原型链上溯(还有一个类继承了基类)而出现混淆问题。

你可能感兴趣的:(js如何实现继承(常用))