gpt4 book ai didi

javascript - 带有 getter/setter 的 JSON stringify ES6 类属性

转载 作者:可可西里 更新时间:2023-11-01 01:27:05 25 4
gpt4 key购买 nike

我有一个 JavaScript ES6 类,该类具有使用 set 设置的属性并使用 get 函数访问。它也是一个构造函数参数,因此可以使用所述属性实例化该类。

class MyClass {
constructor(property) {
this.property = property
}

set property(prop) {
// Some validation etc.
this._property = prop
}

get property() {
return this._property
}
}

我使用 _property 来避免使用 get/set 的 JS 陷阱,如果我直接设置为 property 会导致无限循环。

现在我需要将 MyClass 的一个实例字符串化,以便通过 HTTP 请求发送它。字符串化的 JSON 是一个像这样的对象:

{
//...
_property:
}

我需要生成的 JSON 字符串来保留 property,以便我发送它的服务可以正确解析它。我还需要 property 保留在构造函数中,因为我需要从服务发送的 JSON 构造 MyClass 的实例(它发送的对象带有 property 而不是 _property)。

我该如何解决这个问题?我是否应该在将 MyClass 实例发送到 HTTP 请求之前拦截它并使用正则表达式将 _property 变异为 property ?这看起来很难看,但我将能够保留我当前的代码。

或者,我可以拦截从服务发送到客户端的 JSON,并使用完全不同的属性名称实例化 MyClass。然而,这意味着服务两边的类的不同表示。

最佳答案

您可以使用 toJSON method自定义类序列化为 JSON 的方式:

class MyClass {
constructor(property) {
this.property = property
}

set property(prop) {
// Some validation etc.
this._property = prop
}

get property() {
return this._property
}

toJSON() {
return {
property: this.property
}
}
}

关于javascript - 带有 getter/setter 的 JSON stringify ES6 类属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42107492/

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