详解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 相关文章推荐
javascript表格隔行变色加鼠标移入移出及点击效果的方法
Apr 10 Javascript
javascript图片预加载完整实例
Dec 10 Javascript
JavaScript预解析及相关技巧分析
Apr 21 Javascript
JSON字符串转换JSONObject和JSONArray的方法
Jun 03 Javascript
React快速入门教程
Jan 17 Javascript
javascript基础知识之html5轮播图实例讲解(44)
Feb 17 Javascript
javascript中的面向对象
Mar 30 Javascript
详谈js对url进行编码和解码(三种方式的区别)
Aug 16 Javascript
AngularJS实现的简单拖拽功能示例
Jan 02 Javascript
vue 组件使用中的一些细节点
Apr 25 Javascript
微信小程序在地图选择地址并返回经纬度简单示例
Dec 03 Javascript
vue2 拖动排序 vuedraggable组件的实现
Aug 08 Javascript
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
SWFUpload与CI不能正确上传识别文件MIME类型解决方法分享
2011/04/18 PHP
PHP中使用Session配合Javascript实现文件上传进度条功能
2014/10/15 PHP
php禁止直接从浏览器输入地址访问.php文件的方法
2014/11/04 PHP
yii2.0框架实现上传excel文件后导入到数据库的方法示例
2020/04/13 PHP
Nodejs sublime text 3安装与配置
2014/06/19 NodeJs
js插件设置innerHTML时在IE8下提示“未知运行时错误”解决方法
2015/04/25 Javascript
JS基于cookie实现来宾统计记录访客信息的方法
2015/08/04 Javascript
jquery.qtip提示信息插件用法简单实例
2016/06/17 Javascript
简单实现轮播图效果的实例
2016/07/15 Javascript
ES6中的数组扩展方法
2016/08/26 Javascript
深入理解Node.js的HTTP模块
2016/10/12 Javascript
jQuery实现删除li节点的方法
2016/12/06 Javascript
基于jQuery实现咖啡订单管理简单应用
2017/02/10 Javascript
妙用缓存调用链实现JS方法的重载
2018/04/30 Javascript
使用Vue的slot插槽分发父组件内容实现高度复用、更加灵活的组件(推荐)
2018/05/01 Javascript
vue实现键盘输入支付密码功能
2018/08/18 Javascript
node.js环境搭建图文详解
2018/09/19 Javascript
JavaScript 浏览器对象模型BOM原理与常见用法实例分析
2019/12/16 Javascript
解决Vue router-link绑定事件不生效的问题
2020/07/22 Javascript
js实现微信聊天效果
2020/08/09 Javascript
python 表达式和语句及for、while循环练习实例
2017/07/07 Python
Python3实现抓取javascript动态生成的html网页功能示例
2017/08/22 Python
python中Apriori算法实现讲解
2017/12/10 Python
python如何通过实例方法名字调用方法
2018/03/21 Python
pytorch方法测试——激活函数(ReLU)详解
2020/01/15 Python
Python尾递归优化实现代码及原理详解
2020/10/09 Python
Python实现Kerberos用户的增删改查操作
2020/12/14 Python
CSS3 3D旋转rotate效果实例介绍
2016/05/03 HTML / CSS
升职自荐书范文
2013/11/28 职场文书
幼儿园教师国培感言
2014/02/02 职场文书
英语自我介绍演讲稿
2014/09/01 职场文书
2015年度党风廉政建设工作情况汇报
2015/01/02 职场文书
大班下学期个人总结
2015/02/13 职场文书
餐饮店长岗位职责
2015/04/14 职场文书
感谢信
2019/04/11 职场文书
golang switch语句的灵活写法介绍
2021/05/06 Golang