第一种:原型继承(子类的原型等于父类的实例)
function Parent(){
this.x = 100
}
Parent.prototype.getX = function(){
return this.x;
};
function Child(){
this.y = 200;
}
Child.prototype = new Parent;
Child.prototype.getY = function(){
return this.y;
};
let c1 = new Child;
// c1.__proto__.xxx = xxx 修改子类原型(原有父类的一个实例)的内容,
// 修改后,对其他子类的实例有影响,但对父类的实例没有影响。
// c1.__proto__.__proto__.xxx = xxx 直接修改父类原型,都会影响
第二种:call继承(只能继承父类私有的,不能继承父类共有的)
function Parent(){
this.x = 100;
}
Parent.prototype.getX = function(){
return this.x;
};
function Child(){
// this => Child的一个实例
Parent.call(this);
this.y = 200;
}
Child.prototype.getY = function(){
return this.y;
};
let c1 = new Child;
第三种:寄生组合式继承(call + )
function Parent(){
this.x = 100;
}
Parent.prototype.getX = function(){
return this.x;
};
function Child(){
Parent.call(this);
this.y = 200;
}
// Child.prototype.__proto__ = Parent.prototype
// IE不支持__proto__,可以用Object.create
Child.prototype = Object.create(Parent.prototype);
Child.prototype.getY = function(){
return this.y;
};
let c1 = new Child;