Eval对象方法

时间:2015-11-19 18:33:56

标签: javascript

假设我在javascript中有一个对象,例如:

var x = { 
    "var1":2, 
    "var2":function(){return this.var1;}
}

如何转换var x以便将其打印为:

var x = { 
    "var1":2, 
    "var2":2
}

1 个答案:

答案 0 :(得分:1)

如果要使用这些方法的返回值替换对象的方法,可以这样做:

var x = { 
    var1: 2, 
    var2: function(){return this.var1;}
};


for(var prop in x) {
    if (typeof x[prop] === "function") {
        x[prop] = x[prop]();
    }
}

正如其他人所说,你没有提供JSON,因为函数在JSON中没有表示。你必须将函数表示为字符串,检查字符串是否通过Regexp看起来是函数-y,将字符串包装在括号中,然后评估字符串。另请注意,如果方法采用参数,则无法指定这些参数的值应该是什么,因此Regexp应仅检查没有参数的函数。这应该可以解决问题:

var x = { 
    var1: 2, 
    var2: "function () { return this.var1;}"
};


for(var prop in x) {
    var val = x[prop].toString();
    val = val.replace(/ /g, "");
    if (typeof x[prop] === "function") {
        x[prop] = x[prop]();
    } else if (val.match(/^function\(\){/i)) {
        x[prop] = eval("(" + x[prop] + ")");
    x[prop] = x[prop]();
    }
}