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


Posted in Javascript onMarch 22, 2008

情景一:
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 创建的匿名对象
由于 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的一种模块模式》

Javascript 相关文章推荐
jQuery.prototype.init选择器构造函数源码思路分析
Feb 05 Javascript
『jQuery』取指定url格式及分割函数应用
Apr 22 Javascript
动态获取复选框checkbox选中个数的jquery代码
Jun 25 Javascript
由点击页面其它地方隐藏div所想到的jQuery的delegate
Aug 29 Javascript
使用js操作cookie的一点小收获分享
Sep 03 Javascript
jQuery trigger()方法用法介绍
Jan 13 Javascript
js实现浏览本地文件并显示扩展名的方法
Aug 17 Javascript
微信和qq时间格式模板实例详解
Oct 21 Javascript
Express URL跳转(重定向)的实现方法
Apr 07 Javascript
每天学点Vue源码之vm.$mount挂载函数
Mar 11 Javascript
js实现简单的点名器随机色实例代码
Sep 20 Javascript
vue-cli 3如何使用vue-bootstrap-datetimepicker日期插件
Feb 20 Vue.js
Javascript的一种模块模式
Mar 22 #Javascript
javascript cookie解码函数(兼容ff)
Mar 17 #Javascript
简单的JS多重继承示例
Mar 13 #Javascript
JMenuTab简单使用说明
Mar 13 #Javascript
JObj预览一个JS的框架
Mar 13 #Javascript
DHTML Slide Show script图片轮换
Mar 03 #Javascript
JavaScript面向对象编程
Mar 02 #Javascript
You might like
PHP动态生成javascript文件的2个例子
2014/04/11 PHP
简单的php新闻发布系统教程
2014/05/09 PHP
Gambit vs CL BO3 第一场 2.13
2021/03/10 DOTA
use jscript Create a SQL Server database
2007/06/16 Javascript
ECMAScript6函数默认参数
2015/06/12 Javascript
JavaScript encodeURI 和encodeURIComponent
2015/12/04 Javascript
浅析bootstrap原理及优缺点
2017/03/19 Javascript
Bootstrap 模态对话框只加载一次 remote 数据的完美解决办法
2017/07/09 Javascript
利用pm2部署多个node.js项目的配置教程
2017/10/22 Javascript
ES6 迭代器(Iterator)和 for.of循环使用方法学习(总结)
2018/02/08 Javascript
详解Vue基于 Nuxt.js 实现服务端渲染(SSR)
2018/04/05 Javascript
浅谈如何优雅处理JavaScript异步错误
2019/11/12 Javascript
Vue常用的全选/反选的示例代码
2020/02/19 Javascript
如何优雅地取消 JavaScript 异步任务
2020/03/22 Javascript
[00:43]2016完美“圣”典风云人物:单车宣传片
2016/12/02 DOTA
使用Python的Django框架实现事务交易管理的教程
2015/04/20 Python
python搜索指定目录的方法
2015/04/29 Python
Python中 map()函数的用法详解
2018/07/10 Python
Python使用pickle模块实现序列化功能示例
2018/07/13 Python
解决Django Static内容不能加载显示的问题
2019/07/28 Python
python yield关键词案例测试
2019/10/15 Python
Pandas时间序列重采样(resample)方法中closed、label的作用详解
2019/12/10 Python
python opencv如何实现图片绘制
2020/01/19 Python
Python ellipsis 的用法详解
2020/11/20 Python
高级工程师岗位职责
2013/12/15 职场文书
管道维修工岗位职责
2013/12/27 职场文书
动漫专业高职生职业生涯规划书
2014/02/15 职场文书
村居抓节水倡议书
2014/05/19 职场文书
单位委托书范本(3篇)
2014/09/18 职场文书
教育合作协议范本
2014/10/17 职场文书
财务负责人岗位职责
2015/02/03 职场文书
趣味运动会标语口号
2015/12/26 职场文书
深入理解go slice结构
2021/09/15 Golang
Sql Server之数据类型详解
2022/02/28 SQL Server
Nginx工作模式及代理配置的使用细节
2022/03/21 Servers
前端JS获取URL参数的4种方法总结
2022/04/05 Javascript