getElementById的缩略
在以前,我做过很多这样的尝试,
<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");