谁能说下产生这几个结果有差异的原因?各位踊跃发言,一起探讨学习!

解决方案 »

  1.   

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

  2.   

    没看出什么有需要深入探讨的东西
    第一次时方法由object调用,所以返回其name成员
    第二次时先自行括号内的等号表达式,等号表达式会返回左值,为一个函数引用,执行时没有对象调用它,默认调用者就是window,所以会得到全局变量name