json.stringify不处理对象的方法

17 浏览
0 Comments

json.stringify不处理对象的方法

我正在尝试开发一个离线HTML5应用,应该在大多数现代浏览器(Chrome,Firefox,IE 9+,Safari,Opera)中运行。由于Safari尚不支持IndexedDB,并且WebSQL已被弃用,所以我决定使用localStorage来存储用户生成的JavaScript对象,并使用JSON.stringify()/JSON.parse()来存储或提取这些对象。然而,我发现JSON.stringify()不能处理方法。下面是一个带有简单方法的示例对象:

    var myObject = {};
    myObject.foo = 'bar';
    myObject.someFunction = function () {/*在此函数中的代码*/}

如果我把这个对象进行字符串化(然后放入localStorage),只会保留myObject.foo,而不是myObject.someFunction()

    //将对象放入localStorage
    localStorage.setItem('myObject',JSON.stringify(myObject));
    //从localStorage中取出并赋值给myObject
    myObject = localStorage.getItem('myObject');
    //undefined!
    myObject.someFunction

我相信你们中的许多人可能已经了解到这个限制/特性/不管你想叫它什么。我想到的解决办法是创建一个带有方法的对象(myObject = new objectConstructor()),从localStorage中提取对象属性,并将它们赋值给我创建的新对象。我觉得这是一种绕弯子的方法,但我对JavaScript世界还很陌生,所以这是我解决问题的方式。所以这是我的重要问题:我希望整个对象(属性+方法)都包含在localStorage中。我该如何做?如果你可以给我展示一个更好的算法,或者也许还有我不知道的另一个JSON方法,我将非常感激。

0