我一直在使用 Dean edwards base.js (http://dean.edwards.name/weblog/2006/03/base/) 将我的程序组织成对象(顺便说一句,base.js 非常棒,如果你还没有以前用过它!)。无论如何,我的问题是通用的,你不必知道 base.js 就能知道我的答案。
我的一个对象中有一个名为 ref
的属性,它是对 DOM 元素的引用,并且该对象旨在使用 JSON.stringify
保存为 JSON >,但是正如你可以想象的,由于 DOM 元素是循环结构,我将无法将对象转换为 JSON。
现在为了解决这个问题,我有一个名为 html()
的方法,该方法旨在返回 ref
属性,但我需要有 ref
作为私有(private)属性,只能从对象内部访问,因此不会发送到 stringify
。
最好的方法是什么?
最佳答案
您可能知道 JavaScript 中不能拥有私有(private)属性。
有趣的是,如果您将一个对象传递给 JSON.stringify
,该对象具有 toJSON
方法,JSON.stringify
将自动调用该方法获取该对象的 JSONable 表示形式。所以你所要做的就是实现这个方法。
例如,您可以创建对象的浅拷贝,其中仅包含要复制的属性:
MyConstructor.prototype.toJSON = function() {
var copy = {},
exclude = {ref: 1};
for (var prop in this) {
if (!exclude[prop]) {
copy[prop] = this[prop];
}
}
return copy;
};
另一种方法是 use a custom replacer function ,但控制要排除哪些 ref
以及保留哪些 ref
可能会更困难(如果不同的对象具有 ref
属性):
JSON.stringify(someInstance, function(key, value) {
if(key !== 'ref') {
return value;
}
});
关于javascript - 将对象转换为 JSON,忽略某些(私有(private))属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11761424/