Javascript:如何高效/正确地卸载jsonify
Javascript: how to un-jsonify efficiently/correctly
老实说,我不太确定从哪里开始这个问题。我将描述这种情况:我正在为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;
}
显然,在实际代码中,您需要进行检查,以确保您得到了所需的对象类型。数组和简单的散列对象可以在序列化/去序列化期间简单地复制,尽管它们的子对象通常需要递归。
相关文章:
- document.open/document.write没有正确地清除chrome中的文档——这是chrome的错误吗
- 我是否可以检测到javascript正在被卸载(作为调试模式)
- ADF:有条件地加载javascript资源
- 动态加载和卸载js文件
- 在页面卸载时写入HTML5 FileSystem API存储
- 如何禁用窗口.当计时器超时时,打开卸载警报
- 如何正确地使这个js片段内容不可知
- 如何正确地将参数传递给RequireJS回调函数
- Javascript:如何高效/正确地卸载jsonify
- 反应如何在组件中正确删除列表器将卸载,为什么我需要在构造函数中绑定
- 如何正确地重新加载融合表层
- Firefox不会“;正确地“;打开具有目标=“0”的链接_空白“;JavaScript在页面加载时添加的属性
- 我似乎无法使用组件将卸载可靠地删除侦听器
- 在Internet Explorer上卸载事件之前的正确使用方式
- 在ExtJS 4中卸载/解绑定记录的正确方法是什么?
- 在页面卸载时可靠地完成Ajax请求
- 通过ajax加载的脚本不能正确地向自己发送帖子数据
- 在加载angular之前,怎样才能正确地防止绑定和指令在瞬间可见呢?
- 如何正确地为ajax做上下文预加载器
- 如何在Ember JS中正确地重新加载路由