如何在不获取空对象的情况下使用JSON.stringify和JSON.parse?

我问这个问题的原因是因为我想将LocalStorage用于我的对象。 您可能知道,在使用LocalStorage时,您必须对对象进行JSON.stringify,然后将它们解析回javascript对象。

我试图用方法JSON.stringify一个对象,然后解析它,但我得到的只是一个空对象。

请看一下这段代码。

Person.js

function Person(name, telePhone) { this.getName = function () { return name; } this.setName = function (_name) { name = _name; } this.getTelePhone = function () { return telePhone; } this.setTelePhone = function (_telePhone) { telepPhone = _telePhone; } }; 

Javascript.js

 window.onload = function () { var name = "John"; var telePhone = "073-2335662"; var personObject = new Person(name, telePhone); console.log(personObject); // returns: Person console.log(personObject.getName()); //returns: John var test = JSON.stringify(personObject); var newPersonObject = JSON.parse(test); console.log(newPersonObject); //returns: Object console.log(newPersonObject.getName()); //returns: Uncaught TypeError: Object # has no method 'getName' }; 

为什么在JSON.stringify和JSON.parse之后这个Person对象是空的并丢失所有方法的任何建议?

函数不是有效的JSON数据类型。 当然,函数所拥有的变量范围也无法序列化。

您需要将数据直接存储在对象上以对其进行序列化。

JSON具有“对象” (键/值对)和“数组” (有序列表)样式结构,以及stringnumbertruefalsenull

http://json.org/

JSON.stringify不会序列化函数,因为它们不是数据。 JSON只存储真实数据及其结构 – 变量。 如果你想存储函数,你可以使用.toString()方法将函数源代码转换为字符串,并将其转换回函数你可以使用eval()来创建方法,但这是一个单独的问题。

您可能必须编写自己的序列化程序来执行此类任务,这个想法非常有趣,如果有一个现成的解决方案,我不会感到惊讶。