继承的含义:
继承是面向对象编程中的一个重要概念,通过继承可以使子类的实例使用在父类中定义的属性和方法。
实现继承首先需要一个父类,在js中实际上是没有类的概念,在es6中class虽然很像类,但实际上只是es5上语法糖而已!
继承方法:
js中实现继承的方法共有七种,分别是:
1)原型链继承
2)构造函数继承
3)组合式继承
4)es6继承
1. 原型链继承
核心:
将父类的实例作为子类的原型
优点:
- 易实现,父类新增实例与子类属性都能访问
缺点:
-
子类实例时,不能向父类构造函数中传参数
-
不能多继承
-
可以在子类中增加实例属性,如果要新增加原型属性和方法需要在new 父类构造函数的后面
2. 构造函数继承
用.call()和.apply()将父类构造函数引入子类函数(在子类函数中做了父类函数的自执行(复制))
优点:
-
子类构造函数向父类构造函数中传递参数
-
可以实现多继承(call或者apply多个父类)
缺点:
-
无法复用
-
不能继承原型属性/方法,只能继承父类的实例属性和方法
3.组合继承:
调用父类构造函数,继承父类属性,通过将父类实例作为子类原型,实现函数复用
优点:
-
函数复用
-
不存在引用属性问题
-
可以继承属性和方法,也可以继承原型的属性和方法
缺点:
- 由于调用了两次父类,所以产生了两份实例
4.es6中class继承:
首先利用class构造一个父类,然后利用extends与super实现子类继承
优点:
-
代码量少,易懂