apply、call和bind详解

const user = {
	name: 'user ',
	age: function () {
		console.log(this.name) 
	}
}
const person= {
	name: 'person',
	age: function () {
		console.log(this.name) 
	}
}

call的用法:

 1. 未改变this指向之前
	user.age() // user
	
 2. 改变this指向之后
	// 将this的指向绑定到person对象
	user.age.call(person) // person 

 3.如果还需要传递其他参数 
 	user.age.call(person, '参数一', '参数二','参数三')
 	
> 当后面的参数个数过多时,使用call的话就比较繁琐了 
> (一般参数过多时,我们一般会传递数组比较省事,apply由此诞生了,这也是call和apply的唯一区别)

apply的用法:

 1. 未改变this指向之前
	user.age() // user
	
 2. 改变this指向之后
	// 将this的指向绑定到person对象
	user.age.apply(person) // person 

 3.如果还需要传递其他参数 
 	const arr = ['参数一', '参数二','参数三']
 	user.age.call(person, arr)

bind的用法:

 1. 未改变this指向之前
	user.age() // user
	
 2. 改变this指向之后
	// 将this的指向绑定到person对象,bind返回的是一个函数不会立即调用,需要手动调用一下才会触发
	user.age.bind(person)() // person 

 3.如果还需要传递其他参数 
 	user.age.bind(person, '参数一', '参数二','参数三')
	
> bind与call参数传递方式完全相同,唯一区别call回立即调用函数,bind返回的是一个新的函数,需要手动调用

共同点:

	1、都是用来改变this的指向
	2、第一个参数都是this要指向的对象(这个对象的this指向哪,改变之后的this就指向哪)
	3、后续参数,根据实际需求可以传多个,中间以逗号隔开(apply例外可以直接传递参数数组)

区别:

	1、apply的第二个参数需要以数组的方式传递
	2、call和bind的后续参数直接用逗号隔开
	3、apply和call调用后会立即执行函数, bind最后返回的是一个新的函数,需要再调用一下
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值