2009
08.25
08.25
在网上看到两篇文章燃烧脑细胞时间和详解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”。
暂无回复
添加回复