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

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 错误, 为什么?

正在回答

3 回答

函数是先定义再执行的,比如你写的

 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下载
官方微信