存储 JS 对象以及原型、实例类型等
Storing JS objects along with prototypes, instance types etc
是否有可能从本质上归档 JS 对象的状态,如果您要从中生成 JSON 字符串,则超出序列化的内容?
考虑在游戏中保存状态,并在单独的场合将其加载回 window
。
json 字符串不能包含函数,构造函数...我认为你需要做的是定义一个 class 在那里你可以找到你需要的所有方法,然后你可以从您获得的 json 数据中实例化您的对象。这是一个简单的例子:
function Stats (options) {
this.a = options.a;
this.b = options.b;
this.toString = function () { return this.a + ' ' + this.b; };
this.toJSON = function () { return { a : this.a , b : this.b }; };
// Methods
return this;
}
在这种情况下,每当您获得 json 数据时,您只需要实例化您的对象
var stats = new Stats (JSON);
console.log(stats.toString());
最简单的方法是序列化对象,然后从序列化数据重新创建它:
function AnObject(number, string) {
this.number = number;
this.string = string;
this.add = function(){number++};
}
var initialObject = new AnObject(1, 'a');
var serialized = JSON.stringify(initalObject);
//Gives {"number": 1, "string": "a"}
var parsed = JSON.parse(serialized);
var recreated = new AnObject(parsed.number, parsed.string);
//Is the same as initialObject
如果需要,您可以序列化函数:
function serializeFunction(f) {
var string = f.toString();
return string.substring(string.indexOf('{')+1, string.length - 1);
}
var func = function(){alert(1)};
是否有可能从本质上归档 JS 对象的状态,如果您要从中生成 JSON 字符串,则超出序列化的内容?
考虑在游戏中保存状态,并在单独的场合将其加载回 window
。
json 字符串不能包含函数,构造函数...我认为你需要做的是定义一个 class 在那里你可以找到你需要的所有方法,然后你可以从您获得的 json 数据中实例化您的对象。这是一个简单的例子:
function Stats (options) {
this.a = options.a;
this.b = options.b;
this.toString = function () { return this.a + ' ' + this.b; };
this.toJSON = function () { return { a : this.a , b : this.b }; };
// Methods
return this;
}
在这种情况下,每当您获得 json 数据时,您只需要实例化您的对象
var stats = new Stats (JSON);
console.log(stats.toString());
最简单的方法是序列化对象,然后从序列化数据重新创建它:
function AnObject(number, string) {
this.number = number;
this.string = string;
this.add = function(){number++};
}
var initialObject = new AnObject(1, 'a');
var serialized = JSON.stringify(initalObject);
//Gives {"number": 1, "string": "a"}
var parsed = JSON.parse(serialized);
var recreated = new AnObject(parsed.number, parsed.string);
//Is the same as initialObject
如果需要,您可以序列化函数:
function serializeFunction(f) {
var string = f.toString();
return string.substring(string.indexOf('{')+1, string.length - 1);
}
var func = function(){alert(1)};