如何使用关联方法将JSON对象分解回对象?

时间:2012-06-01 23:36:11

标签: javascript json class persistence

所以,我有一个javascript对象,我通过原型附加了几个方法。

不用担心。

现在,当我将该对象持久化为JSON时,只保留实际的属性值。这很有道理。无论如何,你怎么坚持方法呢?

但是,当我对JSON对象进行分散时,我最终会得到一个看起来像属性的对象,就像我的原始对象一样,它根本不再有任何与它相关的方法。

我理解+为什么+会发生这种情况。

我的问题是,是否已经出现了处理这种情况的某种模式?

就我个人而言,我已经找到了一个名为Classy classes for JS的小型js库,它允许你做这样的事情。

var MyClass = Class.$extend({
  __init__ : function() { alert('called'); },
  toString() : function() {
    return this.value;
  })
});
var obj = MyClass.$withData({value: 42});
alert(obj.toString());

这个+做了+工作,但我看不到一种方法可以轻松地将它应用到深层对象层次。

编辑:我最初并不是很清楚。我知道Classy(和jquery正确,正如我刚才所知)可以将数据应用于特定对象以混合原型方法,但真正的问题是如何为更深层次的对象层次做到这一点。

1 个答案:

答案 0 :(得分:0)

如果您有例如jQuery你可以使用$.extend(obj, yourDataFromJSON);

这会将第二个对象的所有数据合并到第一个对象中,覆盖现有值。

但是,根据Classy code,即使对于嵌套数据,您实际上也可以简单地使用MyClass.$withData(yourDataFromJSON);

for(var key in data) {
    var value = getOwnProperty(data, key);
    if(value !== undefined) rv[key] = value;
}

正如您所看到的,data中的所有内容都放入对象中 - 无论它是否是另一个对象(如果您有嵌套数据),数组或其他任何不是undefined的对象(甚至不存在于JSON中)