题解 | #修改 this 指向#

function bindThis(f, oTarget) {
    // 修改 this 指向
    //call、apply、bind的作用都是改变函数运行时的this指向
    /* 首先,call apply bind三个方法都可以用来改变函数的this指向,具体区别如下:
    1、fn.call (newThis,params) call函数的第一个参数是this的新指向,后面依次传入函数fn要用到的参数。会立即执行fn函数。
    2、fn.apply (newThis,paramsArr) apply函数的第一个参数是this的新指向,第二个参数是fn要用到的参数数组,会立即执行fn函数。
    3、fn.bind (newThis,params) bind函数的第一个参数是this的新指向,后面的参数可以直接传递,也可以按数组的形式传入。  
      不会立即执行fn函数,且只能改变一次fn函数的指向,后续再用bind更改无效。返回的是已经更改this指向的新fn*/
    /* 第一种apply解法
    return function(){
        return f.apply(oTarget, arguments)
    }*/
    /* 第二种call解法
    return function(x, y){
        return f.call(oTarget, x, y)
    }*/
    /* 第三种bind解法 */
    return f.bind(oTarget)
}
为什么call、apply需要封装在一个函数里面进行返回,bind不需要?
网友理解:可能因为bind返回的是一个函数,而apply方法是立即执行函数,所以需要放在一个函数里面,到调用的时候再立即执行
#悬赏#
全部评论

相关推荐

10-24 11:10
山西大学 Java
若梦难了:哥们,面试挂是很正常的。我大中厂终面挂,加起来快10次了,继续努力吧。
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务