大家好!今天来讲讲js中面向对象的继承,首先要明白继承:就是让一个没有某个属性或方法的对象能够使用另一个对象所具有的某个属性或方法。
先举一个简单的例子:
以上是一个简单的实例与实例之间的继承,规模较小。
继承主要是构造函数和构造函数之间的继承,共分为四种:1. 原型的继承; 2.构造函数的继承; 3.混合继承(组合); 4. ES6 class 继承。接下来具体介绍:
1 原型的继承分为两种,一种是原型对象继承,另一种是原型链的继承。
1-1原型对象的继承
优点: 简单,方便,易操作
缺点:只能继承原型身上的方法和属性,不能继承构造函数内的方法和属性
1-2原型链的继承
优点:更加的简单,方便,易操作
不仅可以继承原型身上的方法和属性,而且还可以继承构造函数中的方法和属性
缺点:不方便传参
此原型链的继承原理:
Child的实例c —> proto —> Child.prototype —> Parent的实例 —> proto —> Parent.prototype
2.构造函数继承(改变this指向继承):
优点:方便的传参
还可以实现多继承
缺点:只能继承构造函数内部的属性或方法,不能继承原型身上的属性或方法
改变this的指向,可以使用三种方法。例:abc.call( );abc.bind( );abc.apply( )
构造函数的继承,还可以扩展为多继承,如下:
3 混合继承:构造函数继承 + 原型继承
优点: 既可以继承构造函数,又可以继承原型; 方便传参; 可以多继承构造函数
注意:原型链继承时,依然有参数隐患
混合继承是常用的继承方式之一。如下:
4 ES6的class继承,原理就是:构造函数方式继承 + 原型链继承。
以上就是js中面向对象的继承。文中如果纰漏,错误,不合理,描述不清晰,不准确等问题,欢迎大家批评指正…