gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 03:15:06 25 4
gpt4 key购买 nike

我尝试将对象保存为字符串,为此我使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com