日期:2014-05-16  浏览次数:20407 次

为什么要new一下?
JScript code

                function Odemo(name)
                {
                    return this.name=name;
                }
                
                
                alert(Odemo('abc').name);    //显示undefined
           alert(new Odemo('abc').name);    //显示abc,为什么要new一下才有值?



求指点。。。。。。。

------解决方案--------------------
因为里面有个return 所以

alert(Odemo('abc').name);
//Odemo('abc')的结果是this.name即window.name
alert(window.name.name)的结果当然是undefined


 alert(new Odemo('abc').name);
//new Odemo('abc')的结果是返回Odemo的一个实例,而实例化时this指向的是实例的本身
所以实例.name 当然就是abc

------解决方案--------------------
1、new运算把构造函数的数据类型由Function转换为Object,并捆绑构造函数内部的this指针指定到Object上。
2、alert(Odemo('abc').name);过程,Odemo是一个全局函数调用,返回的内部this指向全局对象window,this.name相当于window.name,而window没有定义name属性,所以SHOW “undefined”。
3、alert(new Odemo('abc').name);过程,通过new运算,JS把this指针绑定到了该函数所构造出来的对象上,当然SHOW “abc”。