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其實本質(zhì)就是oDiv[i]
如果改了了oDiv[i]以后, 報錯提示obj.alpha 錯誤, 為什么?
2016-11-14
函數(shù)是先定義再執(zhí)行的,比如你寫的
?oDiv[i].onmouseover=function () {startMove(this,100);} ?//為什么這里的this 不能用 oDiv[i]替代????
這段代碼在被解析的時候是這樣的?oDiv[i].onmouseover=function () {},
里面的代碼還不會被執(zhí)行,當(dāng)所有函數(shù)被定義完之后在執(zhí)行里面的代碼,而這個時候oDiv[i]已經(jīng)被釋放掉了,不存在了,你再寫oDiv[i]自然就會報錯 。
這只是this的其中一種用法,還有很多,基本用法就是this指向當(dāng)前調(diào)用函數(shù)的那個對象,這里的對象就是oDiv[i],其他還有很多方法就不說了,你可以自己搜下
2016-11-12
個人感覺此處的this應(yīng)該是指針的效果,指向的就是鼠標(biāo)滑過的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]那么對于這個方法來說就沒有這個變量存在
}
以上是自己試驗的結(jié)果,不知道對不對,如果不對告訴我下