关于this的问题。对函数上下文感到极端尴尬..

在制作导航条课程中,老师使用了一句很不理解的定义。var This = this。

window.onload=function(){
    var aA=document.getElementsByTagName('a');
	for(var i=0; i<aA.length; i++){
		aA[i].onmouseover=function(){
			var This=this;//疑惑的地方。
			clearInterval(This.time);
			This.time=setInterval(function(){
					This.style.width=This.offsetWidth+8+"px";
					if(This.offsetWidth>=160)
					clearInterval(This.time);
				},30)
		}
           }

这里的this本身就是function的上下文,既this指向的对象为aA【i】。所以定义一个This=this按照我的理解是多此一举(无视性能压缩等问题。)

但是问题在于,如果我不定义This = this,直接使用this.time或者使用this获取诸如width等属性是获取不到的。。。所以导致后面的所有代码都失去了原有的效用。在chorme浏览器中进行cosolelog的输出也并没有得出明确的结果,反而增加了自己的迷惑程度。

困惑了很久,希望有高手解惑。

MadMarical
浏览 1634回答 2
2回答

柠檬酸钠

setInterval是window对象上的方法,在setInterval的回调函数中this代表window,只有在setInterval外部记录下this,在回调内才能使用

慕粉3769977

在js中,this指向的是调用函数的对象。setInterval其实是window.setInterval,所以在setInterval中,this指向的是window。如果先第一var This=this,然后在setInterval中使用This,则可以确保This指向的是aA[i]。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript