可以通过覆盖JSON.stringify
方法来更改.toJSON
行为:
var obj = {toJSON: function() {return [1,2,3];}};
var x = JSON.stringify(dd);
console.log(x); // "[1,2,3]"
JSON.parse(x); // [1,2,3]
我想传递javascript伪类实例(从其他对象继承的对象)。但是,似乎无法在数据中添加任何函数调用:
function Pseudoclass(x) {
this.x = x;
//More operations
}
如果返回功能,.stringify
将失败。不是说它似乎很可能传递类属性:
//JSON.stringify(inst) will be undefined
Pseudoclass.prototype.toJSON = function() {
//If converted to string, the function loses variables from this scope
return function() {return new Pseudoclass();};
}
如果返回字符串,则将其编码为字符串:
//JSON.stringify(inst) returns "\"Pseudoclass.fromJSON(6)\"" if x was 6
Pseudoclass.prototype.toJSON = function() {
return "Pseudoclass.fromJSON("+this.x+")";
}
所有人都有任何黑客攻击吗?我将此用于pass prepared class instances to Worker - 唯一可以解决此JSON问题或自定义格式的选项。
不要忘记构造函数调用可能不是唯一的方法。我只需要对象继承自我的预定义对象!