javascript - 将对象转换为 JSON,忽略某些(私有(private))属性

标签 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 作为私有(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;
};

DEMO

另一种方法是 use a custom replacer function ,但控制要排除哪些 ref 以及保留哪些 ref 可能会更困难(如果不同的对象具有 ref 属性):

JSON.stringify(someInstance, function(key, value) {
     if(key !== 'ref') {
         return value;
     }
});

DEMO

关于javascript - 将对象转换为 JSON,忽略某些(私有(private))属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11761424/

相关文章:

c# - 使用 JsonUtility 反序列化嵌套对象

javascript - 读取html表绑定(bind)中ng-repeat内隐藏字段的值

javascript - 防止在字段上提交表单输入键 keydown?

JavaScript/JQuery 改变滚动背景

javascript - 在reactJs中选择/取消选择所有复选框

java - 如何在java中使用以下curl post命令?

javascript - JS/jQuery 从 Wordpress 导航创建移动导航

javascript - 如果没有找到任何项目,jQuery 执行 else 语句

node.js - 从服务器获取 json 数据后尝试将其呈现给客户端,但仅显示第一个元素

php - 如何在mysql数据库中插入json数据的特定元素