对象的Eval方法

Eval Method of object

本文关键字:方法 Eval 对象      更新时间:2023-09-26

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

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

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

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

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

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检查字符串是否为function-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]();
    }
}