我有以下代碼賦值和在同一行中返回變量
var s = storage('foo');
s.bar = 100;
storage('foo', s);
storage
從某個存儲媒體返回一個對象。然後我改變對象的一個屬性的值,並再次將它發送到storage
。我的問題是有沒有辦法讓它成爲一個班輪?喜歡的東西
storage('foo', storage('foo').bar = 100);
但上面的代碼只保存100
,而不是整個foo
對象。
這裏是storage
功能,它存儲在localStorage的,但使得對象存儲,而不是字符串存儲:
function storage(item, value) {
if(value!=null) {
var result = (storage()) ? storage() : {};
if(item) result[item] = value;
return localStorage.setItem('storage', JSON.stringify(result))
} else return (item) ? storage()[item] : JSON.parse(localStorage.getItem('storage'));
}
編輯: 所以我結束了以下存儲功能一行變化。但是這不能解釋多維度的用法。所以我會歡迎任何建議。
function storage(item, value, property) {
...
if(item) (property) ? result[item][property] = value : result[item] = value;
...
}
+1(幾乎)1班輪:) – Matt 2013-02-08 12:02:11
最後一個例子看起來很有趣,它是如何工作的?我有一種感覺,這不會以同樣的方式工作,對吧? 'storage('foo',(storage('foo').bar = 100,storage('foo')));' – Achshar 2013-02-08 12:12:32
@Achshar:你說的對,它不會。逗號運算符從左向右評估它的操作數並返回右操作數的結果。在你的例子中,你永遠不會把改變的對象寫回存儲器,因爲'storage('foo')'從存儲器讀取未修改的對象。 – 2013-02-08 12:15:11