getElementById的缩略


谁都知道document.getElementById这个方法写起来比较麻烦,所以有时候我们会使用jq或者自己写一个小函数去封装,但是我这次说的缩略不同于往常的函数封装


在以前,我做过很多这样的尝试,

<script>
    var $=document.getElementById;
    $("qiang");
</script>

但是浏览器给我们报错了

Uncaught TypeError: Illegal invocation 未捕获的类型错误:非法调用

一直以来,我以为我的代码触碰到了浏览器的底线,所以它直接给了来了个非法调用,也因此我没去寻找过原因,直到今天终于知道了答案

首先,这里改变了函数的this引用,正常的用法document.getElementById("qiang")中,getElementById方法的this指向调用它的对象,也就是document,但是当

var $=document.getElementById;

此时,当再度调用$方法,这时候的this值指向了我们的window对象,而document.getElementById方法在浏览器的内部实现中,使用了this,并且this必须正确的指向document,所以这就是为什么我们上面的写法会报错


知道了原因之后,我们也就可以对症下药,找到方法来进行改正了。很明显,既然我们不小心改变了this的指向,那把它再改回来就可以了

    var $=document.getElementById.bind(document);
    $("qiang");
原文地址:https://www.cnblogs.com/jelly7723/p/5636214.html