题解 | #修改 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]);
  };
}
全部评论

相关推荐

05-20 13:59
门头沟学院 Java
米黑子米黑子:你这个成绩不争取下保研?
点赞 评论 收藏
分享
程序员牛肉:主要是因为小厂的资金本来就很吃紧,所以更喜欢有实习经历的同学。来了就能上手。 而大厂因为钱多,实习生一天三四百的就不算事。所以愿意培养你,在面试的时候也就不在乎你有没有实习(除非是同级别大厂的实习。) 按照你的简历来看,同质化太严重了。项目也很烂大街。 要么换项目,要么考研。 你现在选择工作的话,前景不是很好了。
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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