Javascript:如何将带有私有字段的对象保存到文件?
我尝试将对象保存为字符串,为此我使用了Javascript:如何将带有私有字段的对象保存到文件?,javascript,json,object,save,private,Javascript,Json,Object,Save,Private,我尝试将对象保存为字符串,为此我使用了JSON.stringify(),但它只拾取公共字段 如何抢私家车 <html> <head> <title></title> </head> <body> <script> function Class1() { var prop1 = 1; this.prop2 = 2; }
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>
函数Class1(){
var prop1=1;
这个.prop2=2;
};
var inst1=new Class1();
var str=JSON.stringify(inst1);
console.log(str);
输出为:{“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);
}
请注意,虽然fromJSON
方法可以是一个普通函数(我只是碰巧通过将Class1类添加到构造函数中,在传统OOP意义下对其进行了“静态”处理),但toJSON
方法需要访问构造函数的局部变量,因此必须在构造函数中定义它
正如@JamesHill在评论中提到的,如果提供一个方法,可以简化序列化实现。您只需返回一个普通对象,该对象包含要序列化的属性(应该是允许您在反序列化过程中还原实例的属性)。如果它们是私有的,则不应在类上下文之外访问它们,对吗?@DontVoteMeDown,是的,但我仍然需要一种保存整个对象数据的方法。在这种情况下,恐怕您必须创建公共方法来获取这些私有属性,然后创建一个新对象,其中的公共属性填充了这些私有值。这不是私有字段,这是局部变量。。。也许你应该编辑而不是在你的类上定义
this.serialize
,你可以定义this.toJSON()
,返回你想要序列化的对象-这样做的原因是JSON.stringify首先在对象上寻找toJSON
方法,并使用它来获取对象的表示(如果存在的话)(有点像在Java中重写toString)