javascript new Function(”)和new function(){}实例
本文章详细的介绍了关于javascript new Function(\'\')和new function(){}实例用法,有需要学习的朋友可参考一下下。
情景一,代码如下:
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 创建的匿名对象。(谢谢 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 为:“圆
实例代码如下:
- <!DOCTYPE html>
- <html lang="zh-CN">
- <head>
- <meta charset="utf-8" />
- <title></title>
- </head>
- <body>
- <script>
- var f = new Function('x', 'y', 'return x + y;');// 等价于var f = function(x, y){return x + y;}
- console.log(f(1, 1));
- var str = '{"id": 108}';
- console.log((new Function('return ' + str))());// 字符串转对象
- f = new function() {return 'ca';};
- console.log(f);
- // 相当于
- /*function 匿名类() {
- return 'ca';
- }
- f = new 匿名类();
- console.log(f);*/
- f = new function() {return new String('ca');};
- console.log(f);
- // 只要 new 表达式之后的 constructor 返回(return)一个引用对象(数组,对象,函数等),都将覆盖new创建的匿名对象,如果返回(return)一个原始类型(无 return 时其实为 return 原始类型 undefined),那么就返回 new 创建的匿名对象
- </script>
- </body>
- </html>