call、apply、bind三者的用法和区别

176 阅读1分钟

call、apply、bind都是改变this指向的方法

1. call的用法

var A={
	name:"张三",
	T1:function(val){
	console.log(this.name,val)
}
}
var B={
name:'李四',	
}
A.T1.call(B,18);
//输出结果是 李四 18 
//如果不加call,会把B里面的值作为实参输出 结果是 张三 {name:'李四'},
//后面的18因为没有对应的形参则不显示

2.apply的用法

var A={
name:"张三",
T1:function(val1,val2,val3){
console.log(this.name,val1,val2,val3)
	}
}
var B={
name:'李四',
}
A.T1.apply(B,[2,3,4,5]);
//输出结果是李四 2 3 4
//与call 不同的是apply,后面跟是一个数组,数组里面的值对应一个形参,若没有则不显示

3.band的用法

var A={
ame:"张三",
T1:function(val){
	console.log(this.name,val)
}
}
var B={
name:'李四',
}
A.T1.bind(B,19);
//并没有打印任何东西,我们用变量接收一下
var C= A.T1.bind(B,19);
C();
//打印出李四 19
//bind 的方法会先将函数中的this存储起来,再次调用的时候激活
A.T1.bind(B,19)();//这种写法也一样可以调用

以上是三种更改this指向的方法,欢迎补充或纠错