Javascript:如何使用私有字段保存对象文件?

时间:2014-01-10 10:36:22

标签: javascript json object save private

我试图保存像字符串这样的对象,为此我使用JSON.stringify(),但它只选择公共字段。

如何抓住私人?

<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}

1 个答案:

答案 0 :(得分:1)

实际上并没有在对象中找到“私有属性”,它只是构造函数范围内的变量。如果您通过方法与它进行交互,那么通过闭包可以使用这些方法。

如果要使用私有属性序列化对象,则需要编写自己的序列化和反序列化方法,以便访问私有属性(通过闭包),如上所述。

一些代码可以帮助您入门:

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类的“静态”),但{{1}方法需要访问构造函数的局部变量,因此必须在构造函数内定义。

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