我一直在使用 Dean edwards base.js (http://dean.edwards.name/weblog/2006/03/base/) 将我的程序组织成对象(顺便说一句,base.js 非常棒,如果您以前没有使用过它) !)。无论如何,我的问题是通用的,您不必了解 base.js 即可知道我的答案。
我的一个对象有一个属性,称为ref
这是对 DOM 元素的引用,该对象旨在使用以下命令保存为 JSONJSON.stringify
,但正如你可以想象的,由于 DOM 元素是循环结构,我将无法将对象转换为 JSON。
现在为了解决这个问题我有一个方法叫做html()
这意味着返回ref
财产,但我需要有ref
作为私有属性,只能从对象内部访问,因此不会被发送到stringify
.
最好的方法是什么?
您可能知道 JavaScript 中不能拥有私有属性。
有趣的是,如果你将一个对象传递给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;
};
DEMO http://jsfiddle.net/SRa9p/
另一种方法是使用自定义替换函数 https://developer.mozilla.org/En/Using_native_JSON#The_replacer_parameter,但可能更难控制ref
排除以及保留哪一个(如果不同的对象有ref
特性):
JSON.stringify(someInstance, function(key, value) {
if(key !== 'ref') {
return value;
}
});
DEMO http://jsfiddle.net/SRa9p/1/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)