关于this的指向问题

一个关于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); }

  

posted @ 2016-05-16 14:46  BestSamCN  阅读(177)  评论(0编辑  收藏  举报