题解 | #修改 this 指向#

修改 this 指向

http://www.nowcoder.com/practice/a616b3de81b948fda9a92db7e86bd171

从例子的角度解题:

function foo() {
    var r = bindThis(
        function(a, b){return this.test + a + b}, 
        {test: 2})(2, 3); 
    return r === 7; 
}

正常情况下,为了改变f的this指向,指向到target,我们会使用bind、call、apply, 就是这样:

f.apply(target, [arg1, arg2, ...]);

bindThis函数在执行完后需要继续执行,因此函数内部需要return一个function以接收参数(2,3)继续执行。

bindThis() {
    return function(){...}
}

return的函数内部接收了参数(2,3),可以在函数内部使用arguments传递;
且执行完绑定以后,需要返回函数相加后的值,因此需要把f执行完后的值return回去:

function bindThis(f, oTarget) {
  return function() {
    return f.apply(oTarget, [...arguments]);
  };
}
全部评论

相关推荐

11-14 16:13
已编辑
重庆科技大学 测试工程师
Amazarashi66:不进帖子我都知道🐮❤️网什么含金量
点赞 评论 收藏
分享
努力学习的小绵羊:我反倒觉得这种挺好的,给不到我想要的就别浪费大家时间了
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务