我有一个这样的对象:
var someObj = Class.create ({
initialize: function(objName){
this.objName = objName;
}
});
我可以用
o = new someObj("objName");
做一个obj。我可以使用Object.toJSON(o)将o更改为JSON字符串, 但我希望JSON String转换回someObj,所以,我使用eval()来传递 JSON String成为一个对象,但问题是,它可以成为一个JS Obj, 但是“o”的构造函数不是someObj。如何通过使用来评估JSON字符串 “someObj”作为构造函数?
答案 0 :(得分:5)
JSON字符串不能表示具有成员函数的对象,因此您将从JSON字符串中获取的唯一内容是原始数据。假设toJSON方法导致JSON字符串表示具有类实例的所有非函数成员的对象,您应该能够获取结果对象并附加原型以获取所有函数。例如,使用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中的类的框架如何使用原型对象模型,您的milage可能与上面的示例非常相似。此外,使用eval()会创建一个安全漏洞,因此如果您不信任JSON字符串的来源,则应使用不同的反序列化方法。仅供全面报道,以下是我使用原始原型的方法:
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控制台中,这会产生输出:
我叫Brendan Eich
我的名字是Tim Berners-Lee
答案 1 :(得分:2)
var myObject = JSON.parse(myJSONtext, reviver);
可选的reviver参数是a 将为每个人调用的函数 每个级别的关键和价值 最后结果。每个值都是 取而代之的是复活的结果 功能。这可以用来改革 将通用对象转换为实例 伪类,或转换日期 字符串到Date对象。
答案 2 :(得分:0)
eval
ed或json字符串本身的对象。