js 原型继承、call、apply继承

原型继承
function Person(name,age){
	this.name = name
	this.age = age
	this.hobby = ['唱歌','打游戏']
	this.obj= {
		a:1,
		b:2
	}
}
function Person2(){
	this.hos = '123'
}
Person2.prototype = new Person('张三',18)  //原型继承

let Per = new Person2()   //构造函数继承
let Per1 = new Person2()
Per.hobby.push('旅游')
Per.obj.a=3
Per.obj.c=4
Per.name = '王五'
console.log(Per instanceof Person)  //判断per是否person原型,返回true
console.log(Per)
console.log(Per1)

在这里插入图片描述

  • 由此可见原型继承时引用类型的值,改变值时父类的值也会改变
call、apply继承
//call可以继承多个父类继承传递参数时一个一个的传递
function Boy(...name){
	Person.call(this, ...name)
	Person2.call(this, ...name)
}
//apply也可以继承多个类递参数时传递数组
function Goy(...name){
	Person.apply(this, [...name])
	Person2.call(this, [...name[[...name].length-1]].join())
}
let boys = new Boy('王五',33,'女')
let goys = new Goy('张三丰', 100, '男')
boys.hobby.push('1231321')
goys.name = 'goys'
console.log(boys)  
console.log(goys)  

在这里插入图片描述

  • 由此可见call、和apply可以继承多个父类,改变其值时父类并不会变化,call和apply继承时区别在于传递参数上call参数需一个一个的传递,apply是把要传递的参数用数组方式传过去
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值