运行 setter 时超出最大调用大小

Maximum call size exceeded when running setter

我正在为个人项目编写一个棋盘游戏版本,p5.js 是我输出图形的方式。我有一个 class 正在制作对应于我板上的 space 的对象。这些方块需要着色,所以我有一个 setter 可以让我更改颜色,但是当它是 运行 时,它会给我 Uncaught RangeError: Maximum call stack size exceeded.

我已经尝试重命名变量和 setter 来解决命名问题,但事实并非如此。当我将 setter 转换为方法时,程序也会抛出错误。

const gridSpace = class {
  constructor(x, y, num, color) {
    this._posX = x;
    this._posY = y;
    this._num = num;
    this.color = color;
  }
  
  get color() {
    return this.color;
  }
  set color(color) {
    this.color = color;
    this.draw();
  }
}

const space35 = new gridSpace(1, 2, 3, "blue");
space35.color = "red";

我想说 space 在 运行 时变成红色或蓝色方块,而不是 运行 时方块当前的白色。

编辑:我正在向在线 p5.js 编辑器中添加一个 link,这样更容易发现问题。尺寸有点不一致,很抱歉。 https://editor.p5js.org/drewhford04/sketches/s6RbWMzpD

这些调用:this.color = "red"space35.color 正在调用 setter 并且 setter 正在递归调用自身。

另一种方法是将属性 color 重命名为 _color 以避免递归。

const gridSpace = class {
  constructor(x, y, num, color) {
    this._posX = x;
    this._posY = y;
    this._num = num;
    this._color = color;
  }
  
  get color() {
    return this._color;
  }
  set color(color) {
    this._color = color;
    //this.draw();
  }
}

const space35 = new gridSpace(1, 2, 3, "blue");
console.log(space35.color);
space35.color = "red";
console.log(space35.color);