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

来源:10-1 编程挑战

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

写回答 关注

4回答

  • 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根本就不在,这个我就忘记跟刚才那个人说了。

    小丑鱼yan...

    我们想要的返回值就是i的值,可是function里面是调用不到i的值的,所以我们只能定义一个变量来存放i的值。

    2016-09-12 15:38:07

    共 3 条回复 >

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

    就是当前这个调用对象

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

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

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

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

    刘毅毅 回复湛心

    哦。这个问题差不多知道了。正在学习中

    2016-11-16 20:01:41

    共 3 条回复 >

JavaScript进阶篇

本课程从如何插入JS代码开始,带您进入网页动态交互世界

468060 学习 · 21891 问题

查看课程

相似问题