关于this的指向问题

JS this指向详解
本文通过一个实际案例探讨了JavaScript中this关键字的指向问题。作者在测试过程中意外发现即使错误地引用了DOM元素,代码仍能运行,从而引发了对this指向机制的深入分析。文章详细解释了不同浏览器环境下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); }

  

转载于:https://www.cnblogs.com/bestsamcn/p/5498048.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值