原型继承
原理
child.prototype=new parent
child.prototype.constructor=child
子类的原型指向父类的实例,child子类的构造函数指向child。
特点
-
1.子类可以重写父类的方法,导致父类的其他实例受到影响。
-
2.父类中公有或私有的属性,最后都会变成子类中公共的方法和属性。
-
3.把父类的原型放到子类的原型链上,实例想调用这些方法是基于_proto_圆形链查找机制完成的。
构造函数继承
原理
function child(){ parent.call(this,arg)}
通过call来实现继承的本质是改变了this的指向,让父类里的this指到子类的上下文,这样在父类里面通过this设置的属性或方法会被写到子类上。
特点
- 1.父类私有变子类私有的。
- 2.只能继承父类构造函数上的属性和方法,不能继承父类原型链上的属性和方法。
寄生组合继承
原理
function child(){ parent.call(this,arg)}
child.prototype=object.create(parent.prototype)
//实现object.create
object.create=function(obj){
function Fn(){}
Fn.prototype=obj
retrun Fn()
}
call继承+类似于原型继承
特点
- 1.父类私有和公有分别是子类私有和公有属性和方法。
- 2.子类构造函数复制父类的自身属性和方法,子类原型只接受父类的原型方法和属性。
class继承
原理
class child extend parent{
//子类只要继承父类,可以不写consturctor
//一旦写了则在consruecotr第一句话必须是super()
constructor(){
super()
}
}
call继承+类似于原型继承
特点
- 1.不用手动手动设置原型。
- 2.只有部分浏览器支持,需转为ES5代码。