gpt4 book ai didi

javascript - 如何使用 JSON 重新构建 Javascript 对象?

转载 作者:数据小太阳 更新时间:2023-10-29 05:17:08 25 4
gpt4 key购买 nike

我有一个这样的对象:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com