当前位置:编程学习 > JS >>

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>

补充:网页制作,js教程 
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,