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

情景一. new function(){}

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

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

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

也等价于:

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

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

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

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

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

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

情景二. function(){}()

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

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

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

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

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

你真的了解new function(){} 和 function(){}()吗?的更多相关文章

  1. (function ( ){})( ) 与 (function ( ){}( )) 有什么区别?

    js立即执行函数: (function ( ){})( ) 与 (function ( ){}( )) 有什么区别? 转自:http://www.jb51.net/article/75089.htm ...

  2. 【javascript】javascript中function(){},function(){}(),new function(){},new Function()

    和java比起来,javascript真的是松散的无以复加,不过这也让我们在无聊之余,有精力去探讨一些复杂的应用,从而在开发之路上,获得一些新的想法. javascript中的类的构造 javascr ...

  3. javascript 中function(){},new function(),new Function(),Function 摘录

    函数是JavaScript中很重要的一个语言元素,并且提供了一个function关键字和内置对象Function,下面是其可能的用法和它们之间的关系. function使用方式 var foo01 = ...

  4. javascript 中function(){}(),new function(),new Function(),Function

    和java比起来,javascript真的是松散的无以复加,不过这也让我们在无聊之余,有精力去探讨一些复杂的应用,从而在开发之路上,获得一些新的想法. javascript中的类的构造 javascr ...

  5. function,new function,Function,new Function 之间的区别

    测试一: var fud01 = function()  { var temp = 100; this.temp = 200; return temp + this.temp; } alert(typ ...

  6. (function(){...}())与(function(){...})()

    (function(){         ......   }())  或   (function(){            ......   })()  匿名函数自调用,也就是说,定义一个匿名函数 ...

  7. 浅析jQuery(function(){})与(function(){})(jQuery)之间的区别

    本篇文章主要是对jQuery(function(){})与(function(){})(jQuery)之间的区别进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助 Jquery是优秀的Javas ...

  8. jQuery中$(function(){})与(function($){})(jQuery)、$(document).ready(function(){})等的区别详细讲解

    1.(function($) {…})(jQuery); 1).原理: 这实际上是匿名函数,如下: function(arg){…} 这就定义了一个匿名函数,参数为arg 而调用函数时,是在函数后面写 ...

  9. (function($){}) 和$(function(){}) 和$(function($){}) 区别

    请问下(function($){}) 和$(function(){}) 和$(function($){}) 有什么区别 谢谢 一.先看 jQuery(function(){ }); 全写为 jQuer ...

  10. function foo(){}、(function(){})、(function(){}())等函数区别分析

    前面一段时间,看到(function(){}),(function(){}())这些函数就犯晕,不知道它到底是什么意思,为什么函数外要加小括号,函数后要加小括号,加和不加到底有什么区别……一直犯迷糊, ...

随机推荐

  1. HearthBuddy Ai 调试实战2 在使用海巨人的时候,少召唤了一个图腾(费用是对的)

    问题 游戏面板 8是青玉之爪13是海巨人17是恐狼前锋 64是萨满 66是圣骑士63,99,46,是微型木乃伊[其中99和46都是2血3攻,63是2血1攻]57是鱼人木乃伊 微型木乃伊 "L ...

  2. Coarse-to-Fine超分辨率相关

    1.A Coarse-to-Fine Subpixel Registration Method to Recover Local Perspective Deformation in the Appl ...

  3. SQL-W3School-高级:SQL 通配符

    ylbtech-SQL-W3School-高级:SQL 通配符 1.返回顶部 1. 在搜索数据库中的数据时,您可以使用 SQL 通配符. SQL 通配符 在搜索数据库中的数据时,SQL 通配符可以替代 ...

  4. 【如何设置IIS程序池的回收时间,才能最大程度的减少对用户的影响?】

    作为.Net开发人员,其实对IIS的应用程序池知之甚少,前段时间被问到一个问题: 对于互联网web应用,如何在用户毫无感知的情况下回收程序池?(对用户产生最小的影响) 简单理解IIS应用程序池 应用程 ...

  5. ubuntu 18.04安装ftp服务器

    首先安装vsftpd: sudo apt-get install vsftpd 可以通过命令vsftpd -version查看vsftpd版本. 为ftp服务器新建一个用户(比如我这里新建一个用户名和 ...

  6. python中Requests的重试机制

    requests原生支持 import requests from requests.adapters import HTTPAdapter s = requests.Session() # 重试次数 ...

  7. 单例Bean注册表接口SingletonBeanRegistry

    Github: SingletonBeanRegistry.java SingletonBeanRegistry package org.springframework.beans.factory.c ...

  8. mysql/mariadb数据库在插入表数据时,ID竟然成奇数增加了?看完下面内容就知道怎么处理了。

    今天突然被问到一个问题,mysql数据库插入表数据时,设置了ID自增,但是插入数据后,ID却呈奇数增加,不是123456类型,而是13579形式,突然有点懵,研究了一会,发现是auto_increme ...

  9. ”Unstanding the Bias-Variance Tradeoff“主题内容翻译

    对预测模型讨论,预测误差(error)分两类:偏差(bias)造成的误差与方差(variance)造成的误差.最小化偏差与方差的一个权衡.理解这两类误差有利于诊断模型结果和避免过拟合和欠拟合. 偏差与 ...

  10. 一文带你了解babel-preset-env

    参考链接:https://www.jianshu.com/p/000c2670672b