我可以在toJSON重写方法中走私自定义构造函数吗?

时间:2014-12-01 17:07:12

标签: javascript json prototypal-inheritance

可以通过覆盖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问题或自定义格式的选项。

不要忘记构造函数调用可能不是唯一的方法。我只需要对象继承自我的预定义对象!

0 个答案:

没有答案