gpt4 book ai didi

javascript - 为什么JSON不能保存对象的功能?

转载 作者:数据小太阳 更新时间:2023-10-29 06:03:22 25 4
gpt4 key购买 nike

在我的游戏中,我通过将所有对象转换为 JSON 然后将其保存到文件来保存当前状态。有些对象,比如敌人,在它们上面有函数,但 JSON 不能保存函数!有替代方案或解决方案吗?

最佳答案

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 的标准接口(interface),它会查找这个方法并调用它,如果它存在,它将对返回的对象进行字符串化。

.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);

关于javascript - 为什么JSON不能保存对象的功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7955965/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com