详解new function(){}和function(){}()

作者:Blank 来源:怿飞's Blog 时间:2008-02-28 12:28:00 

情景一:

var yx01 = new function() {return "圆心"};
alert(yx01);

我们运行情景一代码,将返回显示“[object object] ”,此时该代码等价于:

function 匿名类(){
  return "圆心";
}
var yx01 = new 匿名类();
alert(yx01);

我们对情景一的代码进行下面改造:

var yx01 = new function() {return new String("圆心")};
alert(yx01);

我们运行,将会发现返回的是“圆心”,这是为什么呢?

只要 new 表达式之后的 constructor 返回(return)一个引用对象(数组,对象,函数等),都将覆盖new创建的匿名对象,如果返回(return)一个原始类型(无 return 时其实为 return 原始类型 undefined),那么就返回 new 创建的匿名对象。(谢谢 Lunatic_Sun ,描述更精准点)

由于 new String 会构造一个对象,而不是一个 string 直接量,且new String(x) 如果带参数,那么alert它的时候就会返回 x。所以 yx01 将返回 new String("圆心") 这个对象,而 alert yx01 则显示 “圆心”。

情景二:

var yx02 = function() {return "圆心"}();
alert(yx02);

我们运行情景二代码,将返回显示“圆心”,此时该代码等价于:

var 匿名函数 = function() {return "圆心"};
yx02 = 匿名函数();
alert(yx02);

很明显,yx02 返回的是匿名函数的执行结果值,即 yx02 为:“圆心”。

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

标签:function,函数,js
0
投稿

猜你喜欢

  • ASP中页面限权访问的几种方法

    2007-12-13 06:53:00
  • 细化解析:Mysql数据库对文件操作的封装

    2008-11-27 16:32:00
  • ASP + XML + JavaScript 实现动态无限级联动菜单

    2008-06-13 06:31:00
  • 手写个小组件(组件入门)asp版

    2013-06-01 20:29:25
  • Linux PHP连接MSSQL

    2011-06-02 12:01:00
  • ASP保存远程图片到本地 同时取得第一张图片并创建缩略图的代码

    2011-04-19 11:07:00
  • 用DW8制作网页中常用的过度效果

    2007-10-16 12:56:00
  • asp如何在ADO中使用存储查询?

    2010-06-17 12:52:00
  • ASP读取日期单日期自动补零函数代码

    2011-02-20 10:39:00
  • web开发以HTML为中心

    2008-02-13 08:14:00
  • 提高ASP性能的最佳选择第二部分

    2007-08-15 12:46:00
  • ASP实现GB2312转UTF-8函数

    2009-02-26 13:08:00
  • js“树”读取xml数据源码

    2007-08-04 19:42:00
  • 使用Title提升可访问性二

    2009-11-16 12:53:00
  • SQL Select语句完整的执行顺序

    2008-09-28 21:22:00
  • FileUpload上传图片预览不变形

    2010-08-05 21:25:00
  • 用asp编写类似搜索引擎功能的代码

    2008-10-23 15:55:00
  • Photoshop设计制作网站流程图解

    2007-10-25 12:06:00
  • ASP 递归调用 已知节点查找根节点的函数

    2011-03-08 10:48:00
  • 有用的:nth-child秘方

    2011-07-01 12:56:11
  • asp之家 网络编程 m.aspxhome.com