【发布时间】:2013-08-07 23:34:36
【问题描述】:
我正在尝试开发一个可以在大多数现代浏览器(Chrome、Firefox、IE 9+、Safari、Opera)中运行的离线 HTML5 应用程序。由于 Safari(尚)不支持 IndexedDB,并且不推荐使用 WebSQL,因此我决定使用 localStorage 来存储用户生成的 JavaScript 对象,并使用JSON.stringify()/JSON.parse() 来放入或取出对象。但是,我发现JSON.stringify() 不处理方法。这是一个带有简单方法的示例对象:
var myObject = {};
myObject.foo = 'bar';
myObject.someFunction = function () {/*code in this function*/}
如果我将此对象字符串化(然后将其放入 localStorage),将保留的只是myObject.foo,而不是myObject.someFunction()。
//put object into localStorage
localStorage.setItem('myObject',JSON.stringify(myObject));
//pull it out of localStorage and set it to myObject
myObject = localStorage.getItem('myObject');
//undefined!
myObject.someFunction
我相信你们中的许多人可能已经知道这个限制/功能/无论您想怎么称呼它。我想出的解决方法是使用方法(myObject = new objectConstructor())创建一个对象,从 localStorage 中提取对象属性,并将它们分配给我创建的新对象。我觉得这是一种迂回的方法,但我是 JavaScript 世界的新手,所以这就是我解决它的方法。所以这是我的大问题:我希望将整个对象(属性+方法)包含在 localStorage 中。我该怎么做呢?如果你能告诉我一个更好的算法,或者我不知道的另一种 JSON 方法,我将不胜感激。
【问题讨论】:
-
JSON 中不存在函数。请参阅:json.org。
-
这就是我阅读规范后的想法,但是你有什么办法可以保存这些方法吗?还是我的方式你会怎么做?
-
我认为使用构造函数是有意义的。毕竟,为什么要存储方法?数据使对象独一无二,方法只是处理数据的方法。我将添加一个从 JSON 字符串填充对象的方法。
-
您的“解决方法”正是如何做到这一点。只序列化和存储数据,而不是整个对象。
标签: javascript json local-storage