1

所以如果我写一个类如下

class Rectangle {
   #width;
   #height;
   constructor() {
      this.#width = 3;
      this.#height = 5; 
   }

}

let rect = new Rectangle();

console.log(JSON.stringify(rect)); // returns {}

它将返回一个空对象,完全忽略我所有的私人成员。添加一个 toJSON 方法是可行的,但这变得非常麻烦。是否有任何内置方法可以轻松让我的私有字段显示在 JSON.stringify 中?还是我只需将每个成员都写入 toJSON 方法?

4

2 回答 2

0

避免写出所有成员的一种选择是在实例上拥有一个私有数据属性,然后序列化/反序列化该属性:

class Rectangle {
   #data;
   constructor(data) {
      this.#data = data;
   }
   getWidth = () => this.#data.width;
   toJson = () => JSON.stringify(this.#data);
}
const r = new Rectangle({ width: 1, height: 1 });
console.log(r.getWidth());
const stringified = r.toJson();
console.log(stringified);

const restructured = new Rectangle(JSON.parse(stringified));
console.log(restructured.getWidth());

于 2021-11-05T03:03:54.580 回答
0

私有属性只能在类声明本身内部访问。您需要编写自己的序列化方法:

class Rectangle {
  #width;
  #height;
  constructor() {
    this.#width = 3;
    this.#height = 5;
  }

  stringify() {
    return JSON.stringify({['#width']: this.#width,['#height']: this.#height})
  }

}

let rect = new Rectangle();

console.log(rect.stringify())

于 2021-11-05T02:30:00.397 回答