为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

MadMarical 2016-08-14 16:53:38
在制作导航条课程中,老师使用了一句很不理解的定义。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的输出也并没有得出明确的结果,反而增加了自己的迷惑程度。困惑了很久,希望有高手解惑。
查看完整描述

2 回答

已采纳
?
柠檬酸钠

TA贡献331条经验 获得超534个赞

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

查看完整回答
4 反对 回复 2016-08-14
?
慕粉3769977

TA贡献16条经验 获得超7个赞

在js中,this指向的是调用函数的对象。setInterval其实是window.setInterval,所以在setInterval中,this指向的是window。如果先第一var This=this,然后在setInterval中使用This,则可以确保This指向的是aA[i]。

查看完整回答
反对 回复 2016-08-14
  • 2 回答
  • 0 关注
  • 1587 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信