题解 | #修改 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方法是立即执行函数,所以需要放在一个函数里面,到调用的时候再立即执行
#悬赏#
全部评论

相关推荐

点赞 评论 收藏
分享
每晚夜里独自颤抖:这个在牛客不是老熟人了吗
点赞 评论 收藏
分享
头顶尖尖的程序员:我是26届的不太懂,25届不应该是找的正式工作吗?为什么还在找实习?大四还实习的话是为了能转正的的岗位吗
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务