JS中的多种继承方式

第一种:原型继承(子类的原型等于父类的实例)

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;
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页