在我的游戏中,我通过将所有对象转换为JSON并将其保存到文件来保存当前状态。一些对象,如敌人,有功能,但JSON无法保存功能!有替代方案还是解决方案?JSON如何不能保存对象的功能?
5
A
回答
7
var Enemy = {
toJSON: function() {
// pack it up
},
fromJSON: function (json) {
// unpack it.
},
/* methods */
};
var e = Object.create(Enemy);
var json = JSON.stringify(e);
var same_e = Enemy.fromJSON(json);
的.toJSON
方法是JSON.stringify
一个标准的接口它看起来这个方法并调用它,如果它存在,它将字符串化返回的对象。
.fromJSON
方法只是您的Enemy对象的命名构造方法。
具体的例子JSfiddle
var Enemy = {
constructor: function(name, health) {
this.health = health || 100;
this.name = name;
},
shootThing: function (thing) { },
move: function (x,y) { },
hideBehindCover: function() {},
toJSON: function() {
return {
name: this.name,
health: this.health
};
},
fromJSON: function (json) {
var data = JSON.parse(json);
var e = Object.create(Enemy);
e.health = data.health;
e.name = data.name;
return e;
}
}
var e = Object.create(Enemy);
e.constructor("bob");
var json = JSON.stringify(e);
var e2 = Enemy.fromJSON(json);
console.log(e.name === e2.name);
元选项:
荟萃办法是,当你加载的类名写入对象
Game.Enemy = {
...
class: "Enemy"
};
然后你所有的json数据你只需要做
var instance = Game[json.class].fromJSON(json);
1
我认为你必须保存对象的类型,这样的功能可以在解析时重新添加。例如。在你的敌人的构造函数中放置一个type
属性。在解析时,首先像正常的JSON一样解析字符串,然后深层遍历结果对象。当你遇到Enemy
的东西时,重新附上方法等等。
相关问题
- 1. 访问的功能,如JSON对象
- 2. 如何在Parse中扩展对象的保存功能,同时仍然调用基本保存功能?
- 3. 保存功能++
- 4. Django后保存功能不保存
- 5. EJB3Unit保存功能并不能真正保存我的实体
- 6. 存储对象[]如在功能NHibernate柱
- 7. 如何解决我的保存功能?
- 8. Powershell保存功能
- 9. 通用功能JSON对象与ObjectMapper
- 10. 存储对象被存储功能
- 11. 将对象存储在localStorage中,该对象不能是json stringify'd?
- 12. 如何保存JSON对象列表
- 13. 如何禁用保存功能
- 14. 的OpenLayers保存功能
- 15. 保存功能的输出
- 16. PostgreSQL中的保存功能
- 17. 的JavaScript:面向对象的功能不存在(不是函数)
- 18. 如何分配流对象功能
- 19. JavaScript对象如何复制功能
- 20. 如何通过类对象angularjs功能
- 21. 保存多个JSON对象
- 22. 保存JSON作为对象
- 23. 我不能返回我的json对象
- 24. 功能的恢复对象
- 25. .find不cheerio对象的功能
- 26. 只有在delayed_job成功完成后,我如何才能保存对象?
- 27. 猫鼬保存功能不执行
- 28. PHP图像保存功能
- 29. 保存文件功能
- 30. 如何保护POST功能
因为json反序列化_data_。 – Raynos
您的函数实例是特定的还是“类”特定的? – Thor84no
当序列化和反序列化时,函数的作用域会发生什么?函数不仅仅是作为字符串表示的代码。 – pimvdb