2011-10-14 3 views
0

私はJSON.stringifyJSON.parseを使用して、localStorageからオブジェクトを格納して検索しています。しかし、JSON.stringifyは、オブジェクトからインスタンス関数を除外しているようです。したがって、JSON.parse以降は、myObject.doSomething()に電話することはできません。私はこの機能を手動で取り付けることができることを知っています:myObject.doSomething = MyClass.prototype.myFunctionしかし、このアクションがウェブアプリで何度も繰り返されると面倒です。どのように人々は通常JavaScriptでこれを行いますか?localstorageから取得したオブジェクトの再構成

+0

'localStorage'では、オブジェクトを値として保持できます。キーは文字列でなければなりません。それらをストリングとして保存する特別な理由はありますか? –

+0

唯一の理由は、このサイトのどこかで、最新のブラウザはlocalStorageの文字列しかサポートしていないと言っていますが、仕様ではオブジェクトをサポートする必要があると言われています。これは本当ですか? – pckben

+0

私はちょうどChromeでテストしましたが、localStorageから取得するオブジェクトは '[object Object]'です。タイプを復元するにはどうしたらいいですか?私はインスタンスメソッドとプロパティを呼び出そうとしましたが、定義されていません。 – pckben

答えて

2

JSONは明らかに関数自体を保持しません。単純な型付き変数のみを格納します。これをパスで解決する方法は、クラス内のメソッドを復元し、そのメソッドをJSONのデータで呼び出すだけで、そのクラスに属するデータでクラスを再設定することです。

私はこれをコードベースのバリューオブジェクト(VO)デザインパターンで広範囲に行っており、かなりうまく機能しています。あなたが窓越しにやり取りしようとすると、このアプローチではIe7/Ie8はあまり親切ではありません。私が思い出したように、いくつかのプロパティで正しい "typeof"を返さないのはIE7だと思うので、クロスウィンドウ通信が関わったときのリストアにはさまざまな課題がありました。

+0

JSでこれを行うにはエレガントな方法はないと思いますか?誰かが別の提案を思いついてからこれを答えにするかどうかをもっと見るのを数日待つよ... – pckben

関連する問題