2009
08.25

Function

在网上看到两篇文章燃烧脑细胞时间详解new function(){}和function(){}()记录下以加深映像;

var della = new function() {return "della"}   //代码1
alert(della)
var yiova = function() { return "yiova" }()   //代码2
alert(yiova);

alert出来的会是什么呢?先不要运行,猜想一下?(感觉和下面的代码很相似,但是有什么区别的?)

var della = function() { return "della" }    //代码3
alert(della);

代码1相当于:

function xoxo() {
    return "della"
}
var della = new xoxo;
alert(della)

返回当然就是[object Object]

(看下怿飞的解释,说实话我也不是很明白)
只要 new 表达式之后的constructor返回(return)一个引用对象(数组,对象,函数等),都将覆盖new创建的匿名对象,如果返回(return)一个原始类型(无return时其实为return原始类型undefined),那么就返回new创建的匿名对象。

代码2相当于

var xoxo = function() {return "yiova"}
var yiova = xoxo();
alert(yiova);

返回的就是 yiova

还有段代码

var della = new function() {return new String ("della")}
alert(della)

(还是看怿飞的解释,根据我的例子稍改注释)由于 new String 会构造一个对象,而不是一个 string 直接量,且new String(x) 如果带参数,那么alert它的时候就会返回 x。所以 della 将返回 new String(”della”) 这个对象,而 alert della 则显示 “della”。

暂无回复

添加回复