假设我在javascript中有一个对象,例如:
var x = {
"var1":2,
"var2":function(){return this.var1;}
}
如何转换var x
以便将其打印为:
var x = {
"var1":2,
"var2":2
}
答案 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]();
}
}