有问题。我这样创建游戏对象:
var game_status = {
money : 350000000,
reset_status : function() {
this.money = 350000000;
}
}
function saveGame(){
localStorage.setItem('game_status', JSON.stringify(game_status));
}
function loadGame(){
game_status = JSON.parse(localStorage.getItem('game_status'));
}
加载游戏状态方法后,“ reset_status”不再存在。
可能我应该描述对象,创建实例,保存实例,然后使用来自加载的参数重新加载创建实例?
答案 0 :(得分:2)
只需将存储状态分配给对象:
Object.assign(game_status, JSON.parse(localStorage.getItem('game_status')));
那样,您不必编写构造函数。
答案 1 :(得分:1)
由于对象状态和对象行为无论如何都位于一个简单的哈希中,并且假设这里需要的是快速修补程序,因此我将执行以下操作:
var INITIAL_GAME = {
money : 350000000
},
game_status;
function saveGame(){
// strip behavior
delete game_status.resetGame;
localStorage.setItem('game_status', JSON.stringify(game_status));
}
function loadGame(){
game_status = JSON.parse(localStorage.getItem('game_status'));
if (!game_status) {
// init by cloning initial object
game_status = JSON.parse(JSON.stringify(INITIAL_GAME));
}
// set behavior again
game_status.resetGame = function resetGame() {
this.money = 350000000;
}
}
loadGame();
答案 2 :(得分:0)
用于(game_statusTemp中的var attrname){game_status [attrname] = game_statusTemp [attrname]; }
针对我的案例的快速解决方法。在发现 How to duplicate object properties in another object?和How can I merge properties of two JavaScript objects dynamically?