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的一种模块模式》