亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

關于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 關注
  • 1696 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號