欢迎来到福编程网,本站提供各种互联网专业知识!

详解new function(){}和function(){}() 区别分析

发布时间:2008-03-22 作者: 来源:转载
只要new表达式之后的constructor返回(return)一个引用对象(数组,对象,函数等),都将覆盖new创建的匿名对象,如果返回(return)一个原始类型(无return时其实为return原始类型undefined),那么就返回new创建的匿名对象。
情景一:
varyx01=newfunction(){return"圆心"};
alert(yx01);
我们运行情景一代码,将返回显示“[objectobject]”,此时该代码等价于:

function匿名类(){
return"圆心";
}
varyx01=new匿名类();
alert(yx01);我们对情景一的代码进行下面改造:

varyx01=newfunction(){returnnewString("圆心")};
alert(yx01);
我们运行,将会发现返回的是“圆心”,这是为什么呢?

只要new表达式之后的constructor返回(return)一个引用对象(数组,对象,函数等),都将覆盖new创建的匿名对象,如果返回(return)一个原始类型(无return时其实为return原始类型undefined),那么就返回new创建的匿名对象
由于newString会构造一个对象,而不是一个string直接量,且newString(x)如果带参数,那么alert它的时候就会返回x。所以yx01将返回newString(”圆心”)这个对象,而alertyx01则显示“圆心”。

情景二:

varyx02=function(){return"圆心"}();
alert(yx02);我们运行情景二代码,将返回显示“圆心”,此时该代码等价于:

var匿名函数=function(){return"圆心"};
yx02=匿名函数();
alert(yx02);很明显,yx02返回的是匿名函数的执行结果值,即yx02为:“圆心”。

当然匿名函数的执行结果也可以为一个匿名对象。具体常见应用可以看《Javascript的一种模块模式》

相关推荐