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

为什么这里的this不能写成as[i],这里的this到底是指什么

 for(var i=0;i<as.length;i++){

        

        as[i].onmouseover=function(){

            this.style.background="#ccc";

        }

        as[i].onmouseout=function(){

            

           this.style.background='none';

            }

        as[i].onclick=function(){

            title.innerHTML=this.innerHTML;

        }

        

    }


提问者:chenjiaobin 2016-04-19 22:20

个回答

  • lqzh
    2016-04-22 16:16:31

     for(var i=0;i<as.length;i++){        

            as[i].onmouseover=function(){

                this.style.background="#ccc";

            }

    }

    如果  this.style.background="#ccc"; 写成 as[i].style.background="#ccc";

    最后as[0]~as[3]的元素的 onmouseover 函数会变成 

    as[0].onmouseover=as[i].style.background="#ccc";

    as[1].onmouseover=as[i].style.background="#ccc";

    as[2].onmouseover=as[i].style.background="#ccc";

    as[3].onmouseover=as[i].style.background="#ccc";

    因为i经过for循环已经计算得出是4.

    所以上式可以写成

    as[0].onmouseover=as[4].style.background="#ccc";

    as[1].onmouseover=as[4].style.background="#ccc";

    as[2].onmouseover=as[4].style.background="#ccc";

    as[3].onmouseover=as[4].style.background="#ccc";

    显然是不正确的, 如果写成this

    as[0].onmouseover=this.style.background="#ccc";

    as[1].onmouseover=this.style.background="#ccc";

    as[2].onmouseover=this.style.background="#ccc";

    as[3].onmouseover=this.style.background="#ccc";

    懂了吧~


  • chenjiaobin
    2016-04-21 22:41:13

    这段代码是为了改变滑过导航条时颜色发生变化,但是为什么不是指向as[i]而是window


  • qq_一季樱花树下的帷幕_0
    2016-04-20 14:50:55

    这里的this指向的是window