gpt4 book ai didi

javascript - JSON.parse() 破坏对象函数

转载 作者:行者123 更新时间:2023-11-28 19:12:22 24 4
gpt4 key购买 nike

我有一些对象,这些对象使用 JSON.stringify() 进行“字符串化”,然后使用 localstorage.setItem() 保存,然后使用 localstorage.getItem() 检索,然后使用 JSON.parse() 进行解析,最后返回到程序中使用的对象数组中。这是我的代码:

var exampleObjects = [];

function objectExample() {
this.exampleFunction = function() {
return this.otherObjectCreatedElsewhere.value;
}
this.otherObjectCreatedElsewhere;
}

function main() {
exampleObjects[ 0 ] = new objectExample();
exampleObjects[ 0 ].otherObjectCreatedElsewhere = otherObjectCreatedElsewhere;
exampleObjects[ 0 ].exampleFunction(); //Works
var save0 = JSON.stringify( exampleObjects[ 0 ] );
localstorage.setItem( 'key', save0 );
save0 = localstorage.getItem( 'key' );
exampleObjects[ 0 ] = JSON.parse( save0 );
exampleObjects[ 0 ].exampleFunction(); //No longer works, instead throws error exampleObjects[ 0 ].exampleFunction is not a function
}

main();

现在我已经用reviver方法查找了JSON.parse,但我就是无法弄清楚。我没有为此上过学,这只是我的一个爱好,但我已经培养了几年了。我真的很喜欢它,但这样的时刻令人沮丧。

编辑

根据 cloudfeet 的宝贵建议,我已经解决了这个问题。基本上,我从保存的 JSON 字符串中获取对象,然后将它们解析为对象,然后创建一个新对象并重新分配所有丰富的属性。

再次感谢!

最佳答案

JSON 不是 JavaScript。它使用 JavaScript 语法的有限子集,但它可以编码的唯一数据类型是:

  • bool 值
  • 数量
  • 字符串
  • 对象:从字符串映射到任何类型
  • 数组:值列表

(参见 http://json.org/ )

JSON 能够序列化函数。任何函数都将被省略(如 undefined),原型(prototype)将被销毁,等等。

所以:您需要做的是将丰富的对象(带有方法等)转换为 JSON,然后能够再次转换回来。

<小时/>

编辑:一个粗略的例子:

function MyObj(name, age) {
this.name = name;
this.age = age;
this.hello = function () {
alert('Hello, ' + this.name + '!');
};
}

当您序列化此内容时,您将得到 {"name": "Sarah", "age": 38} - 没有 "hello" 条目。

因此,要解码,您需要解压它:

var array = JSON.parse(savedString); // Plain JSON
for (var i = 0; i < array.length; i++) {
var plainObj = array[i];
var richObj = new MyObj(plainObj.name, plainObj.age); // reconstruct
array[i] = richObj;
}

这是一种简单的方法,解码逻辑是硬编码的 - 有一些方法可以使它更奇特,例如 JSON.stringify() 的第二个参数和 JSON.parse() ,以及 .toJSON()方法,但大致相同,组织不同。

关于javascript - JSON.parse() 破坏对象函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30534128/

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