SessionStorage i LocalStorage umożliwiają zapisywanie par klucz / wartość w przeglądarce internetowej. Wartość musi być łańcuchem, a save js obiektów nie jest trywialny.
var user = {'name':'John'};
sessionStorage.setItem('user', user);
var obj = sessionStorage.user; // obj='[object Object]' Not an object
Obecnie można uniknąć tego ograniczenia, serializując obiekty do formatu JSON, a następnie deserializując je w celu odzyskania obiektów. Ale interfejs API magazynu zawsze przechodzi przez metody setItem
i getItem
.
sessionStorage.setItem('user', JSON.stringify(user));
var obj = JSON.parse(sessionStorage.getItem('user')); // An object :D
Czy mogę uniknąć tego ograniczenia?
Chcę tylko wykonać coś takiego:
sessionStorage.user.name; // 'John'
sessionStorage.user.name = 'Mary';
sessionStorage.user.name // 'Mary'
Wypróbowałem metody defineGetter
i defineSetter
do przechwytywania wywołań, ale jest to żmudna praca, ponieważ muszę zdefiniować wszystkie właściwości, a moim celem nie jest znajomość przyszłych właściwości.