将普通函数调用的this指向document

clipboard.png
麻烦各位大神给讲讲这道题 有点不明白

阅读 2.7k
2 个回答
先化简一下你的代码吧
    document.getElementById = (function(func){
      return function(){
        return func.apply(document,arguments);
      }
    })(document.getElementById);

    var getId = document.getElementById;
    var div = getId('div1');
  
    alert(div.id);
上面这是你的源代码,首先化简你的那个函数
    //因为后面那个函数是自动执行的,所以直接变成这样,用传的参数 document.getElementById 替换了函数里面的 func 这个形参
    document.getElementById = function(){
      return document.getElementById.apply(document,arguments);
    }

    //继续化简,给 document.getElementById 加上括号,就是执行这个函数后,他的式子, arguments就是传进来的实参所组成的一个伪数组
  document.getElementById() = document.getElementById.apply(document, ["参数1","参数2","参数3..."]);

    //对他的化简到此为止,下面对 var div 部分开始化简
    var div = getId('div1');//化简为
    var div = document.getElementById('div1');//继续化简
    var div = document.getElementById.apply(document, ["div1"]);
这里就要探讨apply这个方法的意思的,在现在这种情况下,如果再继续化简,会变成下面这样
    var div = document.getElementById("div1");

你看啊咱们来分析一把

document.getElementById //,那么在这个function里面,this就是指向document的,

var getId = document.getElementById;
getId();
//不考虑别的,就在现有的代码下,this指向哪里?
//window或者undefined对吧。严格模式的不同。

那么我们提供的那个图片里面的代码有什么效果呢?

他就是让那个function的this还在document上.

那么都有什么方法可以绑定this 呢? .call .apply .bind

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题