1

所以,我有一个 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());

这 +does+ 工作,但我看不到一种方法可以轻松地将其应用于对象的深层层次结构。

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

4

1 回答 1

0

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

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

但是,根据Classy代码,您实际上MyClass.$withData(yourDataFromJSON);甚至可以简单地用于嵌套数据:

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

如您所见,所有 fromdata都被放入对象中——无论它是另一个对象(如果您有嵌套数据)、数组还是其他任何不存在的对象(undefined甚至在 JSON 中都不存在)

于 2012-06-01T23:46:26.663 回答