为什么我这么写不对,this在这里什么意思

来源:10-1 编程挑战

小菜鸟飞

2016-08-11 16:53

 for(var i= 0,len = oLis.length;i<len;i++){

                 oLis[i].index = i;

                 oLis[i].onclick = function() {

                     for(var n= 0;n<len;n++){

                         oLis[n].className = "";

                         oDivs[n].className = "hide";

                     }

oLis[i].className="on";

oDivs[i].className="";

                   //  this.className = "on";

                     //oDivs[this.index].className = "";

                 }


写回答 关注

2回答

  • vylss
    2016-08-17 10:36:45

     for(var i= 0,len = oLis.length;i<len;i++) 分号写成逗号

    共 1 条回复 >

  • 水里有条鱼
    2016-08-11 20:51:20

    oLis[i].className="on";

    oDivs[i].className="";

    给节点绑定事件执行的函数会执行上面那两句,那问题是执行时i是什么?很明显当你要执行代码时,for已经执行完(因为事件全部绑定),所以i恒定为oLis.length,所以oLis[i]和oDivs[i]是没有的,所以出错

    this在这里是指触发函数的对象,比如<p onclick="fun()" id="na"></p> 假如p被点击,触发fun函数对象就是p,现在

    this 等价于 document.getElementById("na")

    水里有条鱼 回复小菜鸟飞

    for就是执行完了,这么短的循环,js里面在for里定义的数是可以在外面是用的,就是i,i在for执行完后还会存在,并且等于最后值, oLis[i].onclick = function() {//代码}只是绑定事件,以及定义函数,真正执行代码是在事件触发时,在这里 for(){oLis[i].onclick = function() {}} 等价 for(){oLis[i].onclick = hanshu();} hanshu(){//代码};

    2016-08-12 14:26:05

    共 2 条回复 >

JavaScript进阶篇

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

468194 学习 · 21891 问题

查看课程

相似问题