js中call、apply和bind的区别

三者都是用来改变this指向的。

var obj = {name: 'psg'};
function sum(num1,num2){
	console.log(num1,num2);
	console.log(this);
}
sum(1,2);//this:window,nm1:1,num2:2

1.call

函数.call(对象,arg1,arg2....)

sum.call(100, 200); //this指向100, num1=200, num2=undefined
sum.call(obj, 100, 200); //this指向obj,  num1=100, num2=200
sum.call(); //this指向window,num1=undefined,num2=undefined

2.apply

函数.apply(对象,[arg1,arg2,...])

sum.apply();//非严格模式下,this指向window
//.apply(改变的指向,[参数1,参数2,...])
sum.apply(obj,[4,5]);//this指向obj,num1 =4,num2=5
sum.apply(obj);//this.指向obj,num1=undefined,num2=undefined
sum.apply([4,5]);//this.指向[4,5],num1=undefined,num2=undefined

3.bind

函数.bind(对象,arg1,arg2,....)()

注:bind返回的是一个函数体,并不会直接执行函数,所以后面要带个括号

sum.bind()();//this指向window,num1=undefined,num2=undefined
sum.bind(obj)();//this.指向obj,num1=undefined,num2=undefined
sum.bind(obj,1,2)();//this指向obj,  num1=1, num2=2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值