改变this指向的方法
之前已近介绍过this指向的情况,其实this的指向是可以改变的,有些人就会好奇,那怎么样改变this的指向呢?
其实改变this的指向,有三种比较常用的方法。
1:call()的用法:
function.call(调用的对象(obj),参数),这个呢是让obj调用这个function方法并执行,参数是以逗号隔开的。
2:apply()的用法:
与call()相似,不同的地方是参数,参数必须是数组或者类数组。也是会直接执行的。
3:bind()的用法:
bind()与上面两种就不一样了,它只是单纯的改变函数的执行上下文,并不会马上执行函数。
var obj = {
name:'tom',
age:20
}
function show(a,b){
console.log(a,b);
}
show(1,2);
//使用call()方法将函数中的this指向变为obj
show.call(obj,1,2);
//通过使用apply方法,将show()函数中的this指向变为obj,可以看到apply()中参二穿的是一个数组。
show.apply(obj,[1,2]);
//强制更改this指向obj,不会立即执行,它会返回一个新函数,需要主动去执行这个函数
show.bind(obj,1,2)();
其实还有一种方法来改变this的指向,就是使用new关键字,构造一个构造函数,那么此时的this指向就指向了构造的那个构造函数。
总结:
call和apply都是改变上下文中的this并立即执行这个函数,但是他们的不同点仅仅是参数的不同,而bind方法可以让对应的函数想什么时候调就什么时候调用,并且可以将参数在执行的时候添加,这是它们的区别。