问答详情
源自:10-1 编程挑战

特别不明白这里的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呢??

提问者:慕粉1469604703 2016-09-08 16:26

个回答

  • qq_凉风有信丶_03837837
    2016-10-28 16:14:03

    发生点击事件的当前对象

  • 小丑鱼yang
    2016-09-10 13:44:16

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

  • qq_追真_03950779
    2016-09-09 16:58:10

    就是当前这个调用对象

  • 湛心
    2016-09-09 16:52:21

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

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

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