有一个问题让 JSON 对整个对象布局进行字符串化。它目前仅对第一个对象级别进行字符串化。如果我采用第二级,并且只对其进行字符串化,它就可以工作。但是,当我尝试整个对象时,它会丢弃任何子级别属性。这是来自构造函数的片段,用于创建表实例。
var doesTableNameExist,
dataBase = {
tables: {}
},
_dataBaseInstance,
_tableInstance = {
TableName: "",
Columns: "",
Rows: "",
RowCount: ""
}
this.TableName = tableName;
this.Columns = columns;
this.Rows = rows;
this.RowCount = 0;
_dataBaseInstance = localStorage.getItem($config.dataBaseName);
if (!!_dataBaseInstance)
{
dataBase = JSON.parse(_dataBaseInstance);
}
doesTableNameExist = dataBase.tables[tableName];
if (!!doesTableNameExist && !forceNew)
{
errorMsg = String.jDBaseFormat("That table name is already used! You cannot have two tables with the name {0}", this.TableName);
console.error(errorMsg);
}
else
{
//create the object table and store it after running JSON against it.
_tableInstance = this;
dataBase.tables[tableName] = _tableInstance;
localStorage.setItem($config.dataBaseName, JSON.stringify(dataBase));
console.log(String.jDBaseFormat("Storing new table '{0}'.", this.TableName));
}
任何帮助将不胜感激。在 stringify 过程之后,对象的样子是:
对象---->表:[];非对象 --> 表:----> 表实例。
这是运行时的对象。
所以我知道这个对象是正确的。但是 JSON 会删除对象属性“表”中的任何内容。不明白为什么。
我也试过这样:
是的。我想知道。它是构造函数表函数的一个实例。我试过这个,也不行。我认为它会使它成为一个通用对象,并且没有附加实例。
_tableInstance = $.extend({}, this);
dataBase.tables[tableName] = _tableInstance;
localStorage.setItem($config.dataBaseName, JSON.stringify(dataBase));
所以我想知道我是否应该只返回一个对象,而不是使用表的“新”构造函数,这样我就可以存储一个常规对象而不是构造函数的实例?我会试试看。感谢所有的帮助。