在我的遊戲中,我通過將所有對象轉換爲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. 如何用sysdate功能保存對象
- 2. 訪問的功能,如JSON對象
- 3. 如何在Parse中擴展對象的保存功能,同時仍然調用基本保存功能?
- 4. 保存功能++
- 5. JSON對象不能GetString的
- 6. Django後保存功能不保存
- 7. TopLink EntityManager不能正確保存對象
- 8. 如何在Django的內存中保存一個共享的功能對象?
- 9. EJB3Unit保存功能並不能真正保存我的實體
- 10. 存儲對象[]如在功能NHibernate柱
- 11. JSON對象不能inintialised
- 12. 如何解決我的保存功能?
- 13. 功能不讀取對象
- 14. Powershell保存功能
- 15. 從功能對象執行的功能
- 16. 通用功能JSON對象與ObjectMapper
- 17. JSON序列發揮功能/對象名
- 18. 存儲對象被存儲功能
- 19. 如何保存JSON對象列表
- 20. 將對象存儲在localStorage中,該對象不能是json stringify'd?
- 21. 帶保存/刪除/更新功能的設計對象
- 22. 功能NHibernate - 的hasMany - 子對象未保存
- 23. 如何禁用保存功能
- 24. 如何更改Laravel ORM保存功能?
- 25. 對象保存陣列性能的plist
- 26. PostgreSQL中的保存功能
- 27. 保存功能的輸出。
- 28. 保存功能的輸出
- 29. 的OpenLayers保存功能
- 30. 對象到功能
因爲json反序列化_data_。 – Raynos
您的函數實例是特定的還是「類」特定的? – Thor84no
當序列化和反序列化時,函數的作用域會發生什麼?函數不僅僅是作爲字符串表示的代碼。 – pimvdb