慕粉1469604703
2016-09-08 16:26
for(var i=0;i<oLis.length;i++){
oLis[i].index=i;
oLis[i].onclick=function(){
for(var n=0;n<oLis.length;n++){
oLis[n].className="";
oDivs[n].className="hide";
}
this.className="on";
oDivs[this.index].className="";
}
}
看到有人解释为调用函数的对象,那这里调用函数的对象是oLis[i],为什么把this换成oLis[i]却布恩那个正常显示呢?
oDivs[this.index].className="";里面的this.index为什么不能直接写成i呢??
发生点击事件的当前对象
这里的 this.className="on"; oDivs[this.index].className=""跟这两句都是在点击事件的function()里面引发,而外面的for循环i的值在点击事件的函数体里面是调用不到的,所以要在定义一个变量来存放i的值,然后当点击事件产生的时候我们就可以调用到index的值也就是i的值,你可以试下在函数体里面alert(i);把i的值打印出来看下,你会发现都是-1,因为i根本就不在,这个我就忘记跟刚才那个人说了。
就是当前这个调用对象
for里面如果嵌套有函数,那么在那个函数里面的 i 实际上的值就等于 oLis.length
所以,在那个函数里面oLis[i] 一直都是最后一个,这样就得不到想要的结果了。
用this的话就能避免这个问题,因为this就是当前调用它的对象
JavaScript进阶篇
468060 学习 · 21891 问题
相似问题