0

有一个问题让 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));    

所以我想知道我是否应该只返回一个对象,而不是使用表的“新”构造函数,这样我就可以存储一个常规对象而不是构造函数的实例?我会试试看。感谢所有的帮助。

4

0 回答 0