详解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 相关文章推荐
js 面向对象的技术创建高级 Web 应用程序
Feb 25 Javascript
JavaScript高级程序设计 错误处理与调试学习笔记
Sep 10 Javascript
js中根据字数截取字符串,不能截断url
Jan 12 Javascript
基于jquery实现瀑布流布局
Jun 28 Javascript
jQuery模拟select实现下拉菜单功能
Jun 20 Javascript
AngularJS 路由和模板实例及路由地址简化方法(必看)
Jun 24 Javascript
JavaScript实现审核流程状态的动态显示进度条
Mar 15 Javascript
vue scroller返回页面记住滚动位置的实例代码
Jan 29 Javascript
element ui里dialog关闭后清除验证条件方法
Feb 26 Javascript
Vue.js上传图片到阿里云OSS存储的方法示例
Dec 13 Javascript
小程序封装wx.request请求并创建接口管理文件的实现
Apr 29 Javascript
Vue组件实现触底判断
Jun 26 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
用PHP实现递归循环每一个目录
2010/08/08 PHP
PHP中设置时区,记录日志文件的实现代码
2013/01/07 PHP
PHP For循环字母A-Z当超过26个字母时输出AA,AB,AC
2020/02/16 PHP
javaScript call 函数的用法说明
2010/04/09 Javascript
JavaScript几种形式的树结构菜单
2010/05/10 Javascript
JQuery在光标位置插入内容的实现代码
2010/06/18 Javascript
基于Jquery 解决Ajax请求的页面 浏览器后退前进功能,页面刷新功能实效问题
2010/12/11 Javascript
javascript 冒泡排序 正序和倒序实现代码
2010/12/14 Javascript
Jquery中使用setInterval和setTimeout的方法
2013/04/08 Javascript
jQuery学习之prop和attr的区别示例介绍
2013/11/15 Javascript
使用jQuery快速解决input中placeholder值在ie中无法支持的问题
2014/01/02 Javascript
jquery实现鼠标拖拽滑动效果来选择数字的方法
2015/05/04 Javascript
javascript实现拖动元素交换位置
2015/11/29 Javascript
jQuery-1.9.1源码分析系列(十一)DOM操作续之克隆节点
2015/12/01 Javascript
JavaScript实现点击单元格改变背景色的方法
2016/02/12 Javascript
Javascript之BOM(window对象)详解
2016/05/25 Javascript
node.js中grunt和gulp的区别详解
2017/07/17 Javascript
Vue.js 中取得后台原生HTML字符串 原样显示问题的解决方法
2018/06/10 Javascript
ES7之Async/await的使用详解
2019/03/28 Javascript
vue+webpack 更换主题N种方案优劣分析
2019/10/28 Javascript
Python下rrdtool模块的基本使用方法
2015/11/13 Python
Python3使用requests发闪存的方法
2016/05/11 Python
详解Golang 与python中的字符串反转
2017/07/21 Python
python3学习笔记之多进程分布式小例子
2018/02/13 Python
python中将zip压缩包转为gz.tar的方法
2018/10/18 Python
使用Pyinstaller转换.py文件为.exe可执行程序过程详解
2019/08/06 Python
用Python抢火车票的简单小程序实现解析
2019/08/14 Python
Keras使用tensorboard显示训练过程的实例
2020/02/15 Python
在Python中用GDAL实现矢量对栅格的切割实例
2020/03/11 Python
关于jupyter打开之后不能直接跳转到浏览器的解决方式
2020/04/13 Python
python实现贪吃蛇双人大战
2020/04/18 Python
HTML5之SVG 2D入门4—笔画与填充
2013/01/30 HTML / CSS
翻译专业应届生求职信
2013/11/23 职场文书
旅游管理毕业生自荐书
2014/02/02 职场文书
运动会邀请函范文
2014/02/06 职场文书
幼儿教师个人总结
2015/02/05 职场文书