在导出的函数中返回新的立即执行的函数

时间:2013-03-15 16:17:28

标签: typescript

我无法编译:

  export function Parse(jsonData) {
        try {
            if (jsonData.d != undefined) {
                if (jsonData.d != "") {
                    return (new function("return " + jsonData.d))();
                }
            }
            else {
                if (jsonData != "") {
                    return (new  function("return " + jsonData))();
                }
            }
            return {};
        }
        catch (e) {
            return { exception: e.Message };
        }
    }

(“返回”语句说明)或}预期

标记错误

2 个答案:

答案 0 :(得分:2)

总体而言,在JavaScript中,最好避免使用new关键字。您可以在没有它的情况下创建立即执行的匿名函数,如下所示:

function Parse(jsonData) {
    try {
        if (typeof jsonData.d !== 'undefined') {
            if (jsonData.d != "") {
                    return (function(j) { 
                        return "return " + j.d;
                    }(jsonData));
                }
            } else {
                if (jsonData != "") {
                    return (function(j) { 
                        return "return " + j;
                    }(jsonData));
                }
            }
            return {};
        }
        catch (e) {
            return { exception: e.Message };
        }
}

var data = { d: 'x' }; // 'test';
var result = Parse(data);
alert(result);

在这个例子中,我删除了new关键字,将jsonData传递给立即执行的函数并添加了return,以便我可以测试结果。

答案 1 :(得分:0)

你想要new Function,而不是new function两个地方(与JavaScript相同)。