题解 | #修改 this 指向#

修改 this 指向

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

{"js":
function bindThis(f, oTarget) {  
        return function() {     
         return f.apply(oTarget,arguments);
   }
}
解题思路:this默认指向是windows全局对象,现有需求改变this的指向,this就是谁调用它就指向谁,
1、可以使用call或者apply来强行改变this的指向
  例子一:
    function foo() {
       console.log(this.a); 
   }
   var obj = {a:2};
   var bar = function() {
      foo.call(obj);
   };
   bar();  //2 强行将this的指向绑定到obj上,所以输出的a=2,注意:强行改变指向后不能再修改它的this。
   例子二:
   function foo(some) {
    console.log(this.a, some);
        return this.a + some;
    }

    var  obj = {a:2};
    var bar = function() {
        return foo.apply(obj,arguments);
    }
    var b = bar(3); // 2 3
    console.log(b); // 5
在此基础上封装一个辅助函数:
    function foo(some) {
        console.log(this.a, some);
        return this.a + some;
    }
    function bind(fn,obj) {
        return function() {
            return fn.apply(obj,arguments);
        };
    }
    var  obj = {a:2};
    var bar = bind(foo,obj);
    var b = bar(3); // 2 3
    console.log(b); // 5
也就是题目上封装的函数,在此基础上ES5提供了内置的方法,Function.prototype.bind,也就是 不需要封装,直接用bind函数就行
把上述的封装函数去掉,直接调用 var bar = foo.bind(obj)就可以实现修改this指向。
全部评论

相关推荐

04-15 13:42
四川大学 Java
蹲蹲offerrr:快投吧,有点晚现在
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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