详解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类的静态属性和实例属性的理解
Oct 01 Javascript
Js-$.extend扩展方法使方法参数更灵活
Jan 15 Javascript
js类式继承的具体实现方法
Dec 31 Javascript
jquery调整表格行tr上下顺序实例讲解
Jan 09 Javascript
Vuejs第十篇之vuejs父子组件通信
Sep 06 Javascript
JS实现的验证身份证及获取地区功能示例
Jan 16 Javascript
轻松玩转BootstrapTable(后端使用SpringMVC+Hibernate)
Sep 06 Javascript
通过js控制时间,一秒一秒自己动的实例
Oct 25 Javascript
Vue开发Html5微信公众号的步骤
Apr 11 Javascript
vue 输入电话号码自动按3-4-4分割功能的实现代码
Apr 30 Javascript
微信小程序实现上传多张图片、删除图片
Jul 29 Javascript
前端框架ECharts dataset对数据可视化的高级管理
Dec 24 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+ajax做仿百度搜索下拉自动提示框(有实例)
2012/08/21 PHP
探讨:array2xml和xml2array以及xml与array的互相转化
2013/06/24 PHP
Windows下安装PHP单元测试环境PHPUnit图文教程
2014/10/24 PHP
php正则匹配html中带class的div并选取其中内容的方法
2015/01/13 PHP
PHP SPL标准库之文件操作(SplFileInfo和SplFileObject)实例
2015/05/11 PHP
递归实现php数组转xml的代码分享
2015/05/14 PHP
php生成数字字母的验证码图片
2015/07/14 PHP
prototype与jquery下Ajax实现的差别
2009/09/13 Javascript
jquery检测input checked 控件是否被选中的方法
2014/03/26 Javascript
javascript省市级联功能实现方法实例详解
2015/10/20 Javascript
9个让JavaScript调试更简单的Console命令
2016/11/14 Javascript
Vue自定义图片懒加载指令v-lazyload详解
2020/12/31 Javascript
webpack学习教程之publicPath路径问题详解
2017/06/17 Javascript
swiper移动端轮播插件(触碰图片之后停止轮播)
2017/12/28 Javascript
ES6函数实现排它两种写法解析
2020/05/13 Javascript
如何在vue中使用video.js播放m3u8格式的视频
2021/02/01 Vue.js
python动态加载变量示例分享
2014/02/17 Python
Python while、for、生成器、列表推导等语句的执行效率测试
2015/06/03 Python
python实现随机调用一个浏览器打开网页
2018/04/21 Python
解决python selenium3启动不了firefox的问题
2018/10/13 Python
python实现年会抽奖程序
2019/01/22 Python
python实现比较类的两个instance(对象)是否相等的方法分析
2019/06/26 Python
Django 路由控制的实现
2019/07/17 Python
django框架CSRF防护原理与用法分析
2019/07/22 Python
python 控制Asterisk AMI接口外呼电话的例子
2019/08/08 Python
python多线程案例之多任务copy文件完整实例
2019/10/29 Python
flask利用flask-wtf验证上传的文件的方法
2020/01/17 Python
利用Python裁切tiff图像且读取tiff,shp文件的实例
2020/03/10 Python
Tensorflow--取tensorf指定列的操作方式
2020/06/30 Python
工作疏忽检讨书
2014/01/25 职场文书
高中自我评价范文
2014/01/27 职场文书
网站客服岗位职责
2014/04/05 职场文书
银行主办会计岗位职责
2014/08/13 职场文书
乡镇领导班子四风对照检查材料
2014/09/27 职场文书
资产运营委托书范本
2014/10/16 职场文书
能用CSS实现的就不要麻烦JavaScript了
2021/10/05 HTML / CSS