Javascript:如何将带有私有字段的对象保存到文件中?
Posted
技术标签:
【中文标题】Javascript:如何将带有私有字段的对象保存到文件中?【英文标题】:Javascript: how to save object with private fields to file? 【发布时间】:2014-01-29 07:01:28 【问题描述】:我尝试保存一个像字符串这样的对象,为此我使用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
【问题讨论】:
如果它们是私有的,它们应该不能在类上下文之外访问,对吧? @DontVoteMeDown,是的,但我仍然需要一种方法来保存整个对象数据 在这种情况下,恐怕你必须创建公共方法来获取这些私有属性,然后创建一个新对象,其中包含这些私有值的公共属性。 那不是私有字段,那是局部变量...也许应该编辑 【参考方案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 类添加到构造函数中来使其成为“静态”),toJSON
方法需要访问构造函数的局部变量,所以必须在构造函数内部定义。
正如@JamesHill 在评论中提到的,如果存在toJSON 方法可以简化序列化实现。您只需要返回一个包含您想要序列化的属性的普通对象(应该是允许您在反序列化过程中恢复实例的属性)。
【讨论】:
不是在你的类上定义this.serialize
,你可以定义this.toJSON()
,返回你想要序列化的对象——这样做的原因是JSON.stringify寻找一个toJSON
方法首先在对象上,并使用它来获取对象的表示,如果存在(有点像在 Java 中覆盖 toString)以上是关于Javascript:如何将带有私有字段的对象保存到文件中?的主要内容,如果未能解决你的问题,请参考以下文章