如何将对象作为json字符串保存到数据库并稍后重新加载?

时间:2011-08-31 20:05:30

标签: javascript

所以我有一个Module对象,我有一个Advmodule对象,它使用以下内容继承自Module:

function object(o) {
    function F() { }
    F.prototype = o;
    return new F();
}
function inheritPrototype(subtype, supertype) {
    var prototype = object(supertype.prototype);
    prototype.constructor = subtype;
    subtype.prototype = prototype;
}

inheritPrototype(AdvModule, Module);

模块有一个名为'settings'的对象变量,它包含诸如X,Y,高度,宽度等内容。目前我将这些设置保存为json格式的数据库。然后,当刷新页面时,将从数据库中提取这些设置以重新创建该模块。

但是现在我也有AdvModule,并且设置中当前没有任何东西表明它应该是什么类型的对象。我知道我可以只分配一个字符串值并在switch语句中使用它来决定使用这些设置构建哪些对象,但我想避免使用switch语句,因为继承自Module的对象数量是不稳定的,我不知道我希望其他开发人员必须进入并不断更改switch语句。我希望设置知道要构建什么对象。

我尝试在'settings'中添加另一个值,即对象的名称:ie - > {type:AdvModule}我在加载时使用它,如此 - > item = new settings.type();这似乎有效。 但是,当我将其保存到我的数据库时,JSON.Stringify似乎将其抛弃或忽略它。

非常感谢任何帮助/建议。感谢

1 个答案:

答案 0 :(得分:1)

{ type : AdvModule }不是有效的JSON对象,除非AdvModule是字符串,数字,数组或JSON对象(不是JavaScript对象,而是JSON定义的对象,即“无序集合名称/值对“[1]”。如果AdvModule是一个类或其他复杂的JavaScript对象,那么JSON.stringify确实会抛弃它。

解决方案是存储对象的名称而不是对象本身,即:

var settings = { type : "AdvModule" };

然后,当你想要实例化它时,你会做这样的事情:

var thing = new window[settings.type];

这相当于调用new window.AdvModule(如果AdvModule不在全局命名空间中,即window,则用正确的上下文替换window