所以,我有一个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正确,正如我刚才所知)可以将数据应用于特定对象以混合原型方法,但真正的问题是如何为更深层次的对象层次做到这一点。答案 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中)