this一般指向的是当前被调用者,我们在定义函数的时候并不能事先确定this指向谁,但我们可以通过其他方式来改变它的指向。
apply()
该方法调用一个函数, 其具有一个指定的this值,以及作为一个数组(或类似数组的对象)提供的参数。
语法:fun.apply(thisArg, [argsArray])
- thisArg: 在 fun 函数运行时指定的 this 值。
- argsArray: 一个数组或者类数组对象。
function bindThis(f, oTarget) {
return function(){
return f.apply(oTarget, arguments);
};
}
call()
call() 方法调用一个函数, 其具有一个指定的this值和分别地提供的参数(参数的列表)。
该方法的作用和 apply() 方法类似,只有一个区别,就是call()方法接受的是若干个参数的列表,而apply()方法接受的是一个包含多个参数的数组。
语法如下: fun.call(thisArg, arg1, arg2, …)
function bindThis(f, oTarget) {
return function(x,y){
return f.call(oTarget,x,y);
};
}
bind()
bind()方法创建一个新的函数, 当被调用时,将其this关键字设置为提供的值,在调用新函数时,在任何提供之前提供一个给定的参数序列。
语法: fun.bind(thisArg[, arg1[, arg2[, …]]])
- thisArg: 当绑定函数被调用时,该参数会作为原函数运行时的 this 指向
- arg1, arg2, … : 当绑定函数被调用时,这些参数将置于实参之前传递给被绑定的方法
function bindThis(f, oTarget) {
return f.bind(oTarget);
}