314*_*926 3 javascript json private object save
我尝试保存一个像字符串这样的对象,为此我使用了它,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>
Run Code Online (Sandbox Code Playgroud)
输出是:{“prop2”:2}
我想要 {"prop1":1, "prop2":2}
“私有属性”实际上并不在对象内部找到,它只是构造函数范围内的变量。如果您通过方法与它交互,那么这些方法将可以通过闭包使用它。
如果要使用其私有属性序列化对象,则需要编写自己的序列化和反序列化方法,这些方法可以访问私有属性(通过闭包),如上所述。
一些帮助您入门的代码:
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);
}
Run Code Online (Sandbox Code Playgroud)
请注意,虽然该fromJSON方法可以是一个普通函数(我只是碰巧通过将其添加到构造函数中,在传统 OOP 意义上使 Class1 类成为“静态”),但该toJSON方法需要访问构造函数的局部变量,因此它必须在构造函数内定义。
正如 @JamesHill 在评论中提到的,如果存在toJSON方法可以简化序列化实现。您只需返回一个普通对象,其中包含要序列化的属性(应该是允许您在反序列化过程中恢复实例的属性)。