我想创建一个可以保存和加载其状态(到本地存储)的 Javascript 对象。
这是我正在使用的基本模式:
var obj = function () {
// private members
//
return {
// public members
load: function () {
this.state = JSON.parse(localStorage.getItem('obj'));
if (this.state === null) {
this.state = {
name: 'foo'
};
}
},
save: function () {
localStorage.setItem('obj', JSON.stringify(this.state));
}
};
}();
// load state
obj.load();
console.log(obj.state.name);
// save state
obj.state.name = 'bar';
obj.save();
但是有一点让我对这种模式感到恼火:我必须通过“状态”属性访问对象的持久属性。
我该如何重写它,以便我可以以更自然的方式使用该对象,例如:
// load state
obj.load();
console.log(obj.name);
// save state
obj.name = 'bar';
obj.save();
这是一个非常简单的“状态”,但该解决方案必须适用于具有嵌套对象、数组等的复杂状态对象,因此简单地向我的对象添加一个“名称”属性并不是我想要的。