SessionStorage 和 LocalStorage 允许在 Web 浏览器中保存键/值对。值必须是字符串,保存js对象不是小事。
var user = {'name':'John'}; sessionStorage.setItem('user', user); var obj = sessionStorage.user; // obj='[object Object]' Not an object
现在,您可以通过将对象序列化为 JSON,然后将它们反序列化以恢复对象来避免此限制。但是 Storage API 总是通过setItemandgetItem方法。
setItem
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'
我尝试了defineGetteranddefineSetter方法来拦截调用,但这是一项乏味的工作,因为我必须定义所有属性,而我的目标是不知道未来的属性。
defineGetter
defineSetter
您可以使用 Web Storage API 提供的访问器,也可以编写包装器/适配器。从您声明的defineGetter/defineSetter 问题看来,编写包装器/适配器对您来说工作量太大。
老实说,我不知道该告诉你什么。也许您可以重新评估您对“可笑限制”的看法。Web Storage API 正是它应有的样子,一个键/值存储。