示例代码
function SuperClass(){}
function SubClass(){}
(一)类式继承
实现:将父类的实例对象赋值给子类的原型prototype
SubClass.prototype = new SuperClass()
优点:继承了父类的this上的属性和方法,并且继承了父类原型上的属性和方法
可以使用instanceof判断一个实例对象是否为某对象上的实例(会随着原型去判断)。注意:SubClass instanceof SuperClass
结果为false,因为instanceof是判断前面的对象是否为后面类的实例
缺点:1)继承来的属性如果是引用类型,那么子类实例对这些属性的修改将会影响所有实例,也会影响父类的实例
2)继承的实现是靠其原型对父类的实例化是实现的,无法向父类传递参数
(二)构造函数继承
实现:在子类中调用父类构造函数
SuperClass.call(this,argument)
优点:相比较于类式继承,他可以向父类传递参数,call函数改变了父类执行的this指向,因此子类对共有属性的改变并不会影响父类
缺点:只继承了父类的绑定在this上的属性和方法,没有涉及原型,所以没有继承父类原型上的属性和方法。
(三)——组合继承
结合类式继承和构造函数继承
实现:
在子类构造函数中执行父类构造函数:SuperClass.call(this,argument)
在子类原型上实例化父类:SubClass.prototype = new SuperClass()
优点:融合了类式继承和构造继承的有点,,过滤了其缺点
缺点:父类构造函数执行了两遍