最新のブラウザー (Chrome、Firefox、IE 9 以降、Safari、Opera) で動作するオフライン HTML5 アプリケーションを開発しようとしています。IndexedDB は (まだ) Safari でサポートされておらず、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
多くの人は、おそらくこの制限/機能/あなたがそれを何と呼びたいかをすでに知っていると確信しています. 私が思いついた回避策は、methods( myObject = new objectConstructor()
) を使用してオブジェクトを作成し、オブジェクトのプロパティを localStorage から取り出して、作成した新しいオブジェクトに割り当てることです。これは回り道だと思いますが、私は JavaScript の世界に慣れていないので、このように解決しました。ここに私の大きな質問があります。オブジェクト全体 (プロパティ + メソッド) を localStorage に含めたいのですが。どうすればいいですか?より良いアルゴリズムや、私が知らない別の JSON メソッドを教えていただければ幸いです。