A-A+

javascript new Function(”)和new function(){}实例

2016年01月21日 前端设计 暂无评论 阅读 6 views 次

本文章详细的介绍了关于javascript new Function(\'\')和new function(){}实例用法,有需要学习的朋友可参考一下下。

情景一,代码如下:

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

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

  1. function 匿名类(){  
  2.         return "圆心";  
  3. }  
  4. var yx01 = new 匿名类();  
  5. alert(yx01);  

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

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

alert(yx01);

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

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

由于 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 为:“圆

实例代码如下:

  1. <!DOCTYPE html>  
  2. <html lang="zh-CN">  
  3. <head>  
  4.     <meta charset="utf-8" />  
  5.     <title></title>  
  6. </head>  
  7. <body>  
  8.     <script>  
  9.         var f = new Function('x', 'y', 'return x + y;');// 等价于var f = function(x, y){return x + y;}  
  10.         console.log(f(1, 1));  
  11.         var str = '{"id": 108}';  
  12.         console.log((new Function('return ' + str))());// 字符串转对象  
  13.         f = new function() {return 'ca';};  
  14.         console.log(f);  
  15.         // 相当于  
  16.         /*function 匿名类() {  
  17.             return 'ca';  
  18.         }  
  19.         f = new 匿名类();  
  20.         console.log(f);*/  
  21.         f = new function() {return new String('ca');};  
  22.         console.log(f);  
  23.         // 只要 new 表达式之后的 constructor 返回(return)一个引用对象(数组,对象,函数等),都将覆盖new创建的匿名对象,如果返回(return)一个原始类型(无 return 时其实为 return 原始类型 undefined),那么就返回 new 创建的匿名对象  
  24.     </script>  
  25. </body>  
  26. </html>  
标签:

给我留言