一个关于this指向而引发的血案。。。
在测试this指向的程序中,我写错了id对象,结果呢,居然也有效果,这真是超于我意料之外太多了,我以为自己写错了,结果一样可以用。。。。。。。
<div id="bbb">show</div>
<script> // window.onload = function(){ // // // var s = document.getElementById('bbb'); // s.onclick = showThis;//this == div#show // bbb.onclick = function(){ // console.log(showThis);//返回的是定义showThis的内容 // showThis();//this = window // } // // showThis();//this = window // } // function showThis(){ // console.log(this); // } window.onload = function(){ //直接使用id的方式调用方法,ie7,8,9,10,11,都支持,只不过ie7都返回object,其他都是[object Window],[object HTMLDivElement]bbb var s = document.getElementById('bbb'); s.onclick = showThis;//this == div#show bbb.onclick = function(){ showThis();//this = window alert(this+'bbb') } // showThis();//this = window } function showThis(){ alert(this); } </script>
做一点总结: window.onload = function(){
//直接使用id的方式调用方法,ie7,8,9,10,11,都支持,只不过ie7都返回object,其他都是[object Window],[object HTMLDivElement]bbb var s = document.getElementById('bbb'); console.log(s[onclick]) // s.onclick = showThis;//this == div#show s.onclick = showThis;//实际上是把showThis的内容赋值给s.onclick,在未赋值前,s[onclick]为undifined
s.onclick = showThis();//实际上和showThis()一样,也没有返回值,这样的方式其实在onclick为赋值前,showThis已经执行了; s.onclick = function(){//也是赋值,但是因为showThis是在外面定义的,所以showThis的this还是window showThis() } s.onclick = function(){//相当于s.onclick = showThis;也是赋值 alert(this) } // s.onclick = showThis(); // bbb.onclick = function(){ // showThis();//this = window // alert(this+'bbb') // } // showThis();//this = window } function showThis(e){ alert(this); }