Максимальный размер вызова превышен при работе сеттера - PullRequest
0 голосов
/ 06 мая 2019

Я кодирую версию настольной игры для личного проекта, где p5.js - мой способ вывода графики.У меня есть класс, который создает объекты, которые соответствуют пробелам на моей доске.Эти квадраты должны быть окрашены, поэтому у меня есть сеттер, который должен позволять мне менять цвета, но когда он запускается, он дает мне Uncaught RangeError: Maximum call stack size exceeded.

Я попытался переименовать переменные и сеттер, чтобы исправитьпроблема с именами, и это было не так.Программа также выдает ошибку, когда я превращаю сеттер в метод.

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";

Я хочу, чтобы указанное пространство заканчивалось либо красным, либо синим квадратом при запуске, а не белым, как это происходит в данный момент при запуске.

Изменить: я добавляю ссылку на онлайн-редактор p5.js, чтобы легче было увидеть проблему.Размер немного противоречив, так что извините за это.https://editor.p5js.org/drewhford04/sketches/s6RbWMzpD

1 Ответ

0 голосов
/ 06 мая 2019

Эти вызовы: this.color = "red" и space35.color вызывают установщик , а установщик сам вызывает рекурсивно.

Альтернативой является переименование атрибута.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);
...