我有一个这样的对象:
var someObj = Class.create ({
initialize: function(objName){
this.objName = objName;
}
});
我可以用
o = new someObj("objName");
制作一个对象。我可以使用 Object.toJSON(o) 将 o 更改为 JSON 字符串, 但我希望 JSON 字符串转换回 someObj,所以,我使用 eval() 来传递 JSON String 成为一个对象,但问题是,它可以成为一个 JS Obj, 但是“o”的构造函数不是 someObj。我如何通过使用评估 JSON 字符串 “someObj”作为构造函数?
最佳答案
JSON 字符串不能表示具有成员函数的对象,因此您从 JSON 字符串中得到的唯一东西就是原始数据。假设 toJSON 方法生成一个 JSON 字符串,表示一个包含类实例的所有非函数成员的对象,您应该能够获取结果对象并附加原型(prototype)以取回所有函数。例如,使用 jQuery 方便的 extend
函数:
var o = new someObj("objName");
var json = Object.toJSON(o);
var json_obj = eval(json);
$.extend(json_obj, someObj.prototype);
json_obj.someMethodDefinedOnsomeObj()
根据您用来在 JavaScript 中表示类的框架如何使用原型(prototype)对象模型,您可能会对上面的示例产生很大的了解。此外,使用 eval() 会产生安全漏洞,因此如果您不信任 JSON 字符串的来源,则应使用不同的反序列化方法。只是为了全面覆盖,这里是我如何使用原始原型(prototype)进行的:
function Animal(name){
this.name = name;
}
Animal.prototype.talk = function(){
console.log("My name is "+this.name);
}
var a = new Animal("Brendan Eich");
a.talk();
var json = '{name: "Tim Berners-Lee"}'
var b = eval(b);
$.extend(b, Animal.prototype);
b.talk();
在 Firebug 控制台中,这会产生输出:
My name is Brendan Eich
My name is Tim Berners-Lee
关于javascript - 如何使用 JSON 重新构建 Javascript 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1589373/