var name = "The Window";var object = {
    name: "My Object",
    getNameFunc: function () {
        return this.name;
    }
};alert((object.getNameFunc = object.getNameFunc)());
运行结果为什么是 "The Window"

解决方案 »

  1.   

    object.getNameFunc = object.getNameFunc  相当于
    function () {
            return this.name;
        }所以alert((object.getNameFunc = object.getNameFunc)())=
    alert(function () {return this.name;}())就相当于执行了alert(this.name);个人理解是这样
      

  2.   

    学习求教:
    alert((object.getNameFunc = object.getNameFunc)()); 
    为什么这样写?
      

  3.   


    <script type="text/javascript">
    <!--
    var name = "I am  Window";
     
    var object = {
        name: "My Object",
        getNameFunc: function () {
            return this.name;
        }
    };var a= object.getNameFunc; //将函数从object中复制出来,这时函数的this指向window
    alert(a());//(var b=a),将返回a,同理(a=a) 返回a 所以这里返回的就是独立的匿名函数,效果等同于上面的代码
    alert((object.getNameFunc = object.getNameFunc)());
    //-->
    </script>
      

  4.   

    这个问题的玄机在于赋值操作“=”的返回值是什么,var a = b;返回的是b。由于object.getNameFunc是个函数,所以(object.getNameFunc = object.getNameFunc)返回的就是一个匿名函数,你可以认为这个函数赋值给了一个临时变量TempFunc,这就是个函数复制的过程,TempFunc是全局的变量,所以其this指向window。这个过程应该等效于var tempFunc = (object.getNameFunc = object.getNameFunc);
    tempFunc();
      

  5.   


    <script type="text/javascript">
    var name = "I am  Window";
    var object = {
        name: "My Object",
        getNameFunc: function () {return this.name;}
    };
    var a=object.getNameFunc;alert(a);//①弹出源代码function () {return this.name;}
    var a=object.getNameFunc();alert(a);//②弹出My Object
    var a=object.getNameFunc;alert(a());//③弹出I am Window
    </script>在我对上面3种结果的原理慢慢理解、彻底理解之后,终于明白了下面这个语句的含义了
    ④alert((object.getNameFunc = object.getNameFunc)());学习了!