Javascript:如何将具有私有(private)字段的对象保存到文件中?

标签 javascript json object save private

我尝试将对象保存为字符串,为此我使用 JSON.stringify() 但它仅获取公共(public)字段。

如何抓私处?

<html>
<head>
    <title></title>
</head>
<body>

    <script>
        function Class1() {
            var prop1 = 1;
            this.prop2 = 2;
        };

        var inst1 = new Class1();

        var str = JSON.stringify(inst1);

        console.log(str);
    </script>
</body>
</html>

输出是:{"prop2":2}

我想要 {"prop1":1, "prop2":2}

最佳答案

“私有(private)属性”实际上并不存在于您的对象中,它只是构造函数作用域中的一个变量。如果您通过方法与它交互,那么这些方法将通过闭包使用它。

如果你想用私有(private)属性序列化一个对象,你需要编写自己的序列化和反序列化方法来访问私有(private)属性(通过闭包),如上所述。

一些让你开始的代码:

function Class1(opt_prop1, opt_prop2) {
  var prop1 = opt_prop1 || 1;
  this.prop2 = opt_prop2 || 2;

  this.toJSON = function() { 
    return { prop1 : prop1, prop2 : this.prop2 }; 
  };
}

Class1.fromJSON = function(str) {
  var obj = JSON.parse(str);
  return new Class1(obj.prop1, obj.prop2);
}

请注意,虽然 fromJSON 方法可以是一个普通函数(我只是碰巧通过将它添加到构造函数中使传统 OOP 意义上的 Class1 类“静态”),toJSON方法需要访问构造函数的局部变量,所以必须在构造函数内部定义。

正如@JamesHill 在评论中提到的,如果存在 toJSON方法可以简化序列化实现。您只需要返回一个普通对象,其中包含您要序列化的属性(应该是允许您在反序列化过程中恢复实例的属性)。

关于Javascript:如何将具有私有(private)字段的对象保存到文件中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21042055/

相关文章:

javascript - 按数字和字典顺序对多维数组进行排序javascript

json - ATLANTBH jmeter 组件 : JSON Path Assertion

javascript - 通过键名从对象数组中删除重复的对象

javascript - 我需要从 Angular 2 中的其他组件获取公共(public)方法

javascript - 如果元素有类则执行某些操作

java - 使用简单的 JSON 解析器 java 访问数组

json - Swift Facebook 获取好友图表请求错误

arrays - 使用颜色数组为重复对象着色

java - 如果比较对象数组索引和对象,如何正确使用 equals()?

javascript - Javascript 中的简单 createElement 问题