将对象转换为JSON,省略某些(私有)属性

时间:2012-08-01 14:26:34

标签: javascript json

我一直在使用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

最好的方法是什么?

2 个答案:

答案 0 :(得分:3)

您可能知道JavaScript中没有私有属性。

有趣的是,如果将对象传递给具有方法JSON.stringify的{​​{1}},toJSON将自动调用该方法以获取该对象的JSONable表示。所以你要做的就是实现这个方法。

例如,您可以创建仅包含要复制的属性的对象的浅表副本:

JSON.stringify

DEMO

另一种方式是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

DEMO

答案 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();