码迷,mamicode.com
首页 > 其他好文 > 详细

this的指向

时间:2017-12-05 20:11:08      阅读:140      评论:0      收藏:0      [点我收藏+]

标签:原因   标签   tag   position   width   element   例子   pre   oat   

梳理一下this的指向问题:

首先,如果在script标签中直接alert(this),我们可以看到,它是指向window的。

<script type="text/javascript">
    alert(this); //[object Window]
</script>

window是js的老大,这里的 alert(this)其实就是window.alert(this);

如果我们有一个像这样的函数并且调用它:

function fn(){
    alert(this); 
}
		
fn();     //[object Window]

仍旧指向的是window,因为还是在window里调用的。fn()其实就是window.fn();

因此我们可以这样理解:this指的是调用当前方法或函数的那个对象。谁动了函数,this就指向谁。

如果我们创建一个按钮,并在点击时触发fn函数。这时候this就指向了按钮

var oBtn = document.getElementById(‘btn‘);
oBtn.onclick=fn;   //object HTMLInputElement

还有一个很重要的概念就是“当前”(上面用红色标出来的)

function fn(){
    alert(this); 
}
var oBtn = document.getElementById(‘btn‘);
oBtn.onclick=function(){
    fn();    //[object Window]
}

这个例子中,是在点击时触发一个函数,在这个函数里面调用了fn;这个时候this就指向window。原因就出在当前上。

Demo this :

用this很简单就实现了div显示隐藏:

<style>
	li{ width: 100px;height: 150px; float: left; margin-right: 30px; background: gray; position: relative; list-style: none; } 
	div{ width: 80px; height: 200px; background: pink; position: absolute; top: 75px; left: 10px; display: none; }
</style>
<script>
	window.onload = function(){
		var aLi = document.getElementsByTagName(‘li‘);
		for( var i=0;i<aLi.length;i++ ){
			aLi[i].onmouseover=function(){
				this.getElementsByTagName(‘div‘)[0].style.display=‘block‘;
			}
			aLi[i].onmouseleave=function(){
				this.getElementsByTagName(‘div‘)[0].style.display=‘none‘;
			}
		}

	}
</script>
<body>
	<ul>
		<li><div></div></li>
		<li><div></div></li>
		<li><div></div></li>
	</ul>
</body>

但如果我们把更改显隐状态放在另外的函数中,在鼠标滑过时来调用呢?根据上面分析,这样的话this是指向window的,大不到我们想要的效果。此时借助一个变量来将this存起来就好。如下:

var aLi = document.getElementsByTagName(‘li‘);
var that = null;
for( var i=0;i<aLi.length;i++ ){
	aLi[i].onmouseover=function(){
		that = this;
		show();
	}
	aLi[i].onmouseleave=function(){
		this.getElementsByTagName(‘div‘)[0].style.display=‘none‘;
	}
}
function show(){
	that.getElementsByTagName(‘div‘)[0].style.display=‘block‘;
}

  

this的指向

标签:原因   标签   tag   position   width   element   例子   pre   oat   

原文地址:http://www.cnblogs.com/PeriHe/p/7988728.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!