173

SessionStorage と LocalStorage を使用すると、キーと値のペアを Web ブラウザーに保存できます。値は文字列である必要があり、js オブジェクトの保存は簡単ではありません。

var user = {'name':'John'};
sessionStorage.setItem('user', user);
var obj = sessionStorage.user; // obj='[object Object]' Not an object

最近では、オブジェクトを JSON にシリアライズし、デシリアライズしてオブジェクトを復元することで、この制限を回避できます。setItemただし、Storage API は常に メソッドとメソッドを通過しgetItemます。

sessionStorage.setItem('user', JSON.stringify(user));
var obj = JSON.parse(sessionStorage.getItem('user')); // An object :D

この制限を回避できますか?

私はちょうどこのような何かを実行したい:

sessionStorage.user.name; // 'John'
sessionStorage.user.name = 'Mary';
sessionStorage.user.name // 'Mary'

defineGetterメソッドとメソッドを使用して呼び出しを傍受しようとしdefineSetterましたが、すべてのプロパティを定義する必要があり、将来のプロパティを知ることが目標ではないため、面倒な作業です。

4

9 に答える 9

116

オブジェクトを「文字列化」することはできませんか...次に、オブジェクトのsessionStorage.setItem()文字列表現を保存するために使用します...次に、必要なときに使用して、オブジェクトを元に戻すためにsessionStorage.getItem()使用しますか?$.parseJSON()

実例http://jsfiddle.net/pKXMa/

于 2012-04-25T22:40:23.860 に答える
24

Web Storage API によって提供されるアクセサーを使用するか、ラッパー/アダプターを作成することができます。defineGetter/defineSetter に関するあなたの述べた問題から、ラッパー/アダプターを書くのはあなたにとって大変な作業のように聞こえます。

正直なところ、あなたに何を伝えたらよいかわかりません。たぶん、「ばかげた制限」とは何かについてのあなたの意見を再評価することができます. Web Storage API は、あるべき姿であり、キー/バリュー ストアです。

于 2011-05-31T21:28:41.743 に答える