var a={
   b:function(){
      alert(this.c);
   },
   c:1,
}
(a.b=a.b)()
各位 麻烦解释一下为什么会输出undfined this=window?

解决方案 »

  1.   

    ???this指向的就应该是a才是呀(a.b=a.b)()??这是啥米用法。木有见过:a.b()吧?再一个c:1,后面的逗号也不应该加
      

  2.   

    你要弄懂js中js是根据啥来判断的
    this是根据作用域来的 那么 你上面代码中的this则他的作用于为b这个对象里面 然后你alert(this.c)而你的c的作用域为a   当然是undfined 
      

  3.   

    var a={
      b:function(){
      alert(this.c);
      },
      c:1,
    }
    a.b();//this指向a.c
    var c=100;
    window.setTimeout(a.b,1000);//指向window.c
    (a.b=a.b)()
    你的那个用法没见过啊
      

  4.   


    var a={
      b:function(){
      alert(this.c);
      },
      c:1,
    }
    (a.b=a.b)()//this指向当前window对象。关键在于最后一个语句,先执行=号表达式,即赋值表达式,该表达式是能得到一个值的,通俗地可以理解为赋值语句有返回值,所以有var a=b=c=……这种语句,那么代码中的例子最后一行语句可以拆分为://(a.b=a.b)()
    var tmp=a.b;
    a.b=tmp;
    tmp();执行时只是执行单纯的一个函数,而与函数所属对象无关,所以函数中的this指向了当前的window对象,不再像调用对象的方法一样。