Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/438.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用方法保存和加载对象?_Javascript_Json_Object_Javascript Objects - Fatal编程技术网

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

Javascript 如何使用方法保存和加载对象?,javascript,json,object,javascript-objects,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)); } fun

我有个问题。我创建的游戏对象如下所示:

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'));
}
加载游戏状态后,“重置状态”方法不再存在


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

只需将存储状态分配给对象:

Object.assign(game_status, JSON.parse(localStorage.getItem('game_status')));

这样,您就不必编写构造函数。

因为无论如何,对象状态和对象行为都存在于一个简单的散列中,并且假设这里需要的是一个快速补丁,我将执行以下操作:

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();
for(var attrname in game_statusTemp){game_status[attrname]= 游戏_statusTemp[attrname];}

我的案子的快速解决方案。发现于

但是game_status是有效的json吗?@nullPointer是的,函数在序列化时被删除,这是需要的行为。MDN显示IE不支持它。是否有任何解决方法或其他解决方案?谢谢您的回答。不过有一个通知。stringify()将删除对象中的任何方法,因此无需删除对象的方法。