我一直在使用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
作为私有属性,只能访问从对象内部,因此不会被发送到stringify
。
最好的方法是什么?
答案 0 :(得分:3)
您可能知道JavaScript中没有私有属性。
有趣的是,如果将对象传递给具有方法JSON.stringify
的{{1}},toJSON
将自动调用该方法以获取该对象的JSONable表示。所以你要做的就是实现这个方法。
例如,您可以创建仅包含要复制的属性的对象的浅表副本:
JSON.stringify
另一种方式是use a custom replacer function,但可能更难控制要排除哪个MyConstructor.prototype.toJSON = function() {
var copy = {},
exclude = {ref: 1};
for (var prop in this) {
if (!exclude[prop]) {
copy[prop] = this[prop];
}
}
return copy;
};
以及要保留哪个(如果不同的对象具有ref
属性):
ref
答案 1 :(得分:0)
这里是设置变量可见性的示例
function Obj(){
this.ref = 'public property'; // this property is public from within the object
var ref = 'private proerty'; // this property is private.
var self = this;
this.showRef = function(){
alert(ref);
alert(self.ref);
};
}
var obj = new Obj();
obj.showRef();