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)

js 原型继承、call、apply继承_第1张图片

  • 由此可见原型继承时引用类型的值,改变值时父类的值也会改变

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)  

js 原型继承、call、apply继承_第2张图片

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

你可能感兴趣的:(js)