Javascript:如何高效/正确地卸载jsonify

Javascript: how to un-jsonify efficiently/correctly

本文关键字:正确地 卸载 jsonify 高效 何高效 Javascript      更新时间:2023-09-26

老实说,我不太确定从哪里开始这个问题。我将描述这种情况:我正在为HTML5游戏制作一个级别编辑器。级别编辑器已经可以使用了——现在我想保存/加载用这个编辑器创建的级别。

由于这一切都是在Javascript(关卡编辑器和游戏)中完成的,我想让save简单地将关卡转换为JSON,然后加载。。。取消审核。

问题是,关卡包含几种类型的对象(几种不同类型的实体、几种类型的动画对象等)。现在,每次我想向游戏中添加对象时,我都必须专门为该对象编写一个unsonify方法,然后修改关卡对象的unsonify方法,以便它可以处理新定义的对象类型的unsonify。

我不能简单地使用JSON.parse,因为它只是返回一个与原始对象具有相同键和值的对象,但它实际上不是该类/原型的对象。那么,我的问题是,有没有一种正确的方法可以做到这一点,而不需要每次我想向游戏添加新类型的对象时都不断修改代码?

我会在每个对象上创建串行化/去串行化方法,将它们的状态放入JSON对象中,并从中恢复。复合对象会递归地序列化/取消序列化它们的子对象。举个例子:

function Player {
  this.weapon = new Weapon();
}
Player.prototype.serialise = function () {
  return {'type': 'Player', weapon: this.weapon.serialise()};
}
Player.deserialise = function(json_object) {
  var player = new Player();
  player.weapon = Weapon.deserialise(json.weapon);
  return player;
}

显然,在实际代码中,您需要进行检查,以确保您得到了所需的对象类型。数组和简单的散列对象可以在序列化/去序列化期间简单地复制,尽管它们的子对象通常需要递归。