我有一个像这样的对象:
var someObj = Class.create ({
initialize: function(objName){
this.objName = objName;
}
});
Run Code Online (Sandbox Code Playgroud)
我可以用
o = new someObj("objName");
Run Code Online (Sandbox Code Playgroud)
做一个obj.我可以使用Object.toJSON(o)将o更改为JSON字符串,但我希望JSON字符串转换回someObj,因此,我使用eval()将JSON字符串传递给对象,但问题是是,它可以成为一个JS Obj,但"o"的构造函数不是someObj.如何使用"someObj"作为构造函数来评估JSON字符串?
小智 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()
Run Code Online (Sandbox Code Playgroud)
根据您用来表示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();
Run Code Online (Sandbox Code Playgroud)
在firebug控制台中,这会产生输出:
我叫Brendan Eich
我叫Tim Berners-Lee
| 归档时间: |
|
| 查看次数: |
1740 次 |
| 最近记录: |