我有一个像这样的对象:
var someObj = Class.create ({ initialize: function(objName){ this.objName = objName; } });
我可以用
o = new someObj("objName");
做一个obj.我可以使用Object.toJSON(o)将o更改为JSON字符串,但我希望JSON字符串转换回someObj,因此,我使用eval()将JSON字符串传递给对象,但问题是是,它可以成为一个JS Obj,但"o"的构造函数不是someObj.如何使用"someObj"作为构造函数来评估JSON字符串?
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