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

特别不明白这里的this是什么??为什么要这么用??

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呢??

正在回答

4 回答

发生点击事件的当前对象

0 回复 有任何疑惑可以回复我~

这里的   this.className="on"; oDivs[this.index].className=""跟这两句都是在点击事件的function()里面引发,而外面的for循环i的值在点击事件的函数体里面是调用不到的,所以要在定义一个变量来存放i的值,然后当点击事件产生的时候我们就可以调用到index的值也就是i的值,你可以试下在函数体里面alert(i);把i的值打印出来看下,你会发现都是-1,因为i根本就不在,这个我就忘记跟刚才那个人说了。

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

慕粉1469604703 提问者

这里的返回值应该是3吧。。。
2016-09-12 回复 有任何疑惑可以回复我~
#2

慕粉1469604703 提问者

非常感谢,好像有一点儿明白了。
2016-09-12 回复 有任何疑惑可以回复我~
#3

小丑鱼yang

我们想要的返回值就是i的值,可是function里面是调用不到i的值的,所以我们只能定义一个变量来存放i的值。
2016-09-12 回复 有任何疑惑可以回复我~

就是当前这个调用对象

0 回复 有任何疑惑可以回复我~

for里面如果嵌套有函数,那么在那个函数里面的 i 实际上的值就等于 oLis.length 

所以,在那个函数里面oLis[i] 一直都是最后一个,这样就得不到想要的结果了。

用this的话就能避免这个问题,因为this就是当前调用它的对象

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

刘毅毅

请问为什么for嵌套函数会这样?还有就是这里是onlick触发的函数,没有触发时函数会不会随着for循环运行呢?
2016-11-13 回复 有任何疑惑可以回复我~
#2

湛心 回复 刘毅毅

为什么用this而不用i,主要是一个作用域的问题,等你学会作用域,你的问题就不需要我解释了
2016-11-16 回复 有任何疑惑可以回复我~
#3

刘毅毅 回复 湛心

哦。这个问题差不多知道了。正在学习中
2016-11-16 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

特别不明白这里的this是什么??为什么要这么用??

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信