Javascript 存储JS对象以及原型、实例类型等

Javascript 存储JS对象以及原型、实例类型等,javascript,json,object,save,archive,Javascript,Json,Object,Save,Archive,除了从JSON对象生成JSON字符串所需序列化的内容之外,是否可以从本质上归档JS对象的状态 考虑在游戏中保存状态,并在另一个场合将其加载回窗口。json字符串不能包含函数、构造函数。。。我认为你需要做的是定义一个类,在这个类中你可以找到你需要的所有方法,然后你可以从你得到的json数据中实例化你的对象。下面是一个简单的例子: function Stats (options) { this.a = options.a; this.b = options.b; th

除了从JSON对象生成JSON字符串所需序列化的内容之外,是否可以从本质上归档JS对象的状态


考虑在游戏中保存状态,并在另一个场合将其加载回
窗口。

json字符串不能包含函数、构造函数。。。我认为你需要做的是定义一个类,在这个类中你可以找到你需要的所有方法,然后你可以从你得到的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());

json字符串不能包含函数、构造函数。。。我认为你需要做的是定义一个类,在这个类中你可以找到你需要的所有方法,然后你可以从你得到的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());

json字符串不能包含函数、构造函数。。。我认为你需要做的是定义一个类,在这个类中你可以找到你需要的所有方法,然后你可以从你得到的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());

json字符串不能包含函数、构造函数。。。我认为你需要做的是定义一个类,在这个类中你可以找到你需要的所有方法,然后你可以从你得到的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)};

最简单的方法是序列化对象,然后从序列化数据重新创建:

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

最简单的方法是序列化对象,然后从序列化数据重新创建:

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

最简单的方法是序列化对象,然后从序列化数据重新创建:

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

什么状态不会包含在对象的JSON字符串中?您需要知道执行任何(反)序列化的类型,然后原型将被继承。如果您需要存储对象“构造函数”来保存它,您的状态是什么?我认为这种魔法应该避免。状态为普通对象+自定义存储/恢复函数似乎是更好的方法。它在web应用程序中经过了很好的测试(参见示例)。您有哪些状态不会包含在对象的JSON字符串中?您需要知道执行任何(反)序列化的类型,然后原型将被继承。如果您需要存储对象“构造函数”来保存它,您的状态是什么?我认为这种魔法应该避免。状态为普通对象+自定义存储/恢复函数似乎是更好的方法。它在web应用程序中经过了很好的测试(参见示例)。您有哪些状态不会包含在对象的JSON字符串中?您需要知道执行任何(反)序列化的类型,然后原型将被继承。如果您需要存储对象“构造函数”来保存它,您的状态是什么?我认为这种魔法应该避免。状态为普通对象+自定义存储/恢复函数似乎是更好的方法。它在web应用程序中经过了很好的测试(参见示例)。您有哪些状态不会包含在对象的JSON字符串中?您需要知道执行任何(反)序列化的类型,然后原型将被继承。如果您需要存储对象“构造函数”来保存它,您的状态是什么?我认为这种魔法应该避免。状态为普通对象+自定义存储/恢复函数似乎是更好的方法。它经过了web应用程序的良好测试(参见示例)。