多种方式修改this的指向
1.修改this的指向
题目:
function () {
var r = bindThis(function (a, b) {
return this.test + a + b
}, {test: 2} ) (2, 3);
return r === 7;
}
- apply
function bindThis(f, oTarget) {
return function(){
return f.apply(oTarget,arguments);
} //外层的return目的是为了在调用bindThis函数时,直接进修改,f对应的时function(a,b){},oTarget对应的是{test:2}
}
- bind
function bindThis(f, oTarget) {
return f.bind(oTarget)
}//bind会自动返回绑定之后的函数,不需要嵌套return了,客观来说bind方法的效率会更高
- call
function bindThis(f, oTarget) {
return function() {
return f.call(oTarget, ...arguments)
}
}
4.利用引用数据的特点
function bindThis(f, oTarget) {
return function(...args){
//返回一个函数--封装;。。。arg用于将数据都接收到数组args中
oTarget.f=f;
//利用对象的方法中的this指向对象原理,将f中的this指向对象
return oTarget.f(...args);//函数的最终结果返回函数指向结果。。。args将参数展开传入
}
}
apply,call,bind三者的区别
- 三者都可以改变函数的this对象指向。
- 三者第一个参数都是this要指向的对象,如果如果没有这个参数或参数为undefined或null,则默认指向全局window。
- 三者都可以传参,但是apply是数组,而call是参数列表,且apply和call是一次性传入参数,而bind可以分为多次传入。
- bind 是返回绑定this之后的函数,便于稍后调用;apply 、call 则是立即执行 。

浙公网安备 33010602011771号