js继承方式(自存)

js继承的六种继承方式

function Person(){
	this.name = 'person'
}

1.原型链继承

function Child1(){
	this.name = 'child1'
}
Child1.prototype = new Person()

原型链继承让新实例的原型等于父类的实例
优势:实例可以继承实例的构造函数的属性,父类的构造函数属性,父类原型的属性(实例不会继承父类实例的属性)
劣势:新实例无法向父类构造函数传参、继承单一、所有新实例都会共享父类实例的属性。原型上的属性是共享的,一个实例修改了原型属性,另外一个实例的原型属性也会被修改
2.构造函数继承

//构造函数继承
function Child2(){
	Person.call(this)
}
var child2 = new Child2()

用call和apply将父类构造函数引入子类函数
之继承了父类构造函数的属性,没有继承父类原型的属性
解决了原型链的继承缺点
可以继承多个构造函数属性
子实例可以像父实例中传参
劣势:只能继承父类构造函数重点 属性 无法实现构造函数的 复用 构造函数副本过多 臃肿
3.组合继承

function Child3(){
	Person.call(this)
}
Child3.prototype = new Person()

结合了以上两种方式的优点 :传参和复用
缺陷:调用了两次父类构造函数子类的构造函数会替代原型上的那个父类构造函数

4.原型式继承

funtion content(obj){
	function F(){}
	F.prototype = obj
	return new F()
}
var child4 = content(new Person())

5.寄生式继承

funtion content(obj){
	function F(){}
	F.prototype = obj
	return new F()
}
function Child5(obj){
	var con = content(obj)
	con.name = 'aaa'
	return con
}

6.寄生组合式继承

function content(obj){
	function F(){}
	F.prototype = obj
	return new F()
}
function Child6(){
	Person.call(this)
}
var con= content(Person.prototype)
Child6.prototype = con
con.constructor = Child6

https://www.cnblogs.com/ranyonsue/p/11201730.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值