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

為了賬號安全,請及時綁定郵箱和手機立即綁定

startMove(this,100); 為什么這里的this 不能用 oDiv[i]替代????

window.onload=function (){

? ?var oDiv=document.getElementsByTagName('div');

? ?for(i=0;i<oDiv.length;i++){

? ?oDiv[i].timer=null;

? ?oDiv[i].alpha=30;

? ?oDiv[i].onmouseover=function () {startMove(this,100);} ?//為什么這里的this 不能用 oDiv[i]替代????

? ?oDiv[i].onmouseout=function(){startMove(this,30);}

}

}


function startMove(obj,iTarget) {

var speed=obj.alpha>iTarget?speed=-5:speed=5;

? ?clearInterval(obj.timer);

? ?obj.timer=setInterval( function(){

? ? if (obj.alpha==iTarget) { ?clearInterval(obj.timer);}?

? ? else {obj.alpha+=speed;obj.style.opacity=obj.alpha/100;}

? ?},30)?

}?

按我的理解, 這里的this其實本質就是oDiv[i]

如果改了了oDiv[i]以后, 報錯提示obj.alpha 錯誤, 為什么?

正在回答

2 回答

函數是先定義再執行的,比如你寫的

?oDiv[i].onmouseover=function () {startMove(this,100);} ?//為什么這里的this 不能用 oDiv[i]替代????

這段代碼在被解析的時候是這樣的?oDiv[i].onmouseover=function () {},

里面的代碼還不會被執行,當所有函數被定義完之后在執行里面的代碼,而這個時候oDiv[i]已經被釋放掉了,不存在了,你再寫oDiv[i]自然就會報錯 。

這只是this的其中一種用法,還有很多,基本用法就是this指向當前調用函數的那個對象,這里的對象就是oDiv[i],其他還有很多方法就不說了,你可以自己搜下

0 回復 有任何疑惑可以回復我~
#1

rainy_li3676598 提問者

里面的代碼還不會被執行,當所有函數被定義完之后在執行里面的代碼, 你說的“當所有函數被定義完之后在執行里面的代碼,” 這個 “所有函數被 定義完成后”指的是 哪里的函數? function里面這個 , 還是說我整 個onload里面的?
2016-11-15 回復 有任何疑惑可以回復我~
#2

冷月詩魂

額,回想一下發現不對,oDiv[i]并沒有被釋放掉,我錯了。。
2016-11-15 回復 有任何疑惑可以回復我~
#3

冷月詩魂 回復 rainy_li3676598 提問者

onload里面的。 其實寫oDiv[i]也行的,但i的值循環完后就被加了1,所以不存在,你寫oDiv[i-1] ( 1 你可以改成2,3...你就知道了 )
2016-11-15 回復 有任何疑惑可以回復我~

個人感覺此處的this應該是指針的效果,指向的就是鼠標滑過的div,

window.onload = function(){
? ?var aLi = document.getElementsByTagName("li");---------aLi[i]的生命周期只在這個大花括號中
? ?for(var i=0;i<aLi.length;i++){
? ? ? ?aLi[i].timer = null;
? ? ? ?aLi[i].alpha = 0;
? ? ? ?aLi[i].onmouseover = myMouseOver;
? ?}
}
function myMouseOver(){
? ?startMove(this,100,'opacity');--------此處如果是aLi[i]那么對于這個方法來說就沒有這個變量存在
}

以上是自己試驗的結果,不知道對不對,如果不對告訴我下

0 回復 有任何疑惑可以回復我~
#1

rainy_li3676598 提問者

應該不是你這樣的,因為在onload里面開始已經申明了aLi,然后startMove是在里面,是可以調用的,函數申明是可以給子函數用的
2016-11-12 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

startMove(this,100); 為什么這里的this 不能用 oDiv[i]替代????

我要回答 關注問題
微信客服

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

幫助反饋 APP下載

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

公眾號

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