我有一个 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/