题解 | #修改 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-04 14:10
东南大学 Java
_可乐多加冰_:去市公司包卖卡的
点赞 评论 收藏
分享
一个菜鸡罢了:哥们,感觉你的简历还是有点问题的,我提几点建议,看看能不能提供一点帮助 1. ”新余学院“别加粗,课程不清楚是否有必要写,感觉版面不如拿来写一下做过的事情,教育经历是你的弱势就尽量少写 2. “干部及社团经历”和“自我评价”删掉 3. 论文后面的“录用”和“小修”啥的都删掉,默认全录用,问了再说,反正小修毕业前肯定能发出来 4. 工作经验和研究成果没有体现你的个人贡献,着重包装一下个人贡献
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务