如何使用方法保存和加载对象?

时间:2018-07-22 16:09:01

标签: javascript json object javascript-objects

有问题。我这样创建游戏对象:

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”不再存在。

可能我应该描述对象,创建实例,保存实例,然后使用来自加载的参数重新加载创建实例?

3 个答案:

答案 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?