Доступ и изменение свойств родительского объекта в JS

У меня есть два класса, класс environment имеет свойство станций, которые должны иметь несколько экземпляров класса station. Я пытаюсь добавить на станцию ​​метод увеличения, который увеличит значение станции и уменьшит ожидающее значение родительской среды на ту же величину. Я пытался возиться с super, parent и Object.getPrototypeOf, но, поскольку я новичок в JavaScript OOP (и в JavaScript как таковом), я борюсь. Любая помощь!

class enviroment {
  constructor(name) {
    this.name = name;
    this.pending = 0;
    this.stations = [];
  }

  newStation(value = 0, name = null) {
    this.stations.push(new station(value, name));
    return this;
  }
}

class station {
  constructor(value = 0, label = null) {
    this.value = value;
    this.label = label;
    this.isTaken = false;
  }

  increase(increasment) {
    this.value += increasment;
    this.parent.pending -= increasment; // <---- HERE
    return this;
  }
}
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
26
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете попробовать это, добавив ссылку на среду на такие станции, как:

class enviroment {
  constructor(name) {
    this.name = name;
    this.pending = 0;
    this.stations = [];
  }

  newStation(value = 0, name = null) {
    this.stations.push(new station(value, name, this));
    return this;
  }
}

class station {
  constructor(value = 0, label = null, environment = null) {
    this.value = value;
    this.label = label;
    this.isTaken = false;
    this.environment = environment;
  }

  increase(increasment) {
    this.value += increasment;
    if (this.environment)
      this.environment.pending -= increasment; // <---- HERE
    return this;
  }
}

Затем, когда я пытаюсь преобразовать его в JSON и отправить с помощью res.send() (в Express), я получаю «TypeError: Преобразование циклической структуры в JSON», есть идеи, что делать?

Iftach 22.03.2022 10:23

О, я вижу, атрибут «имя» в среде уникален? Может быть, вы могли бы хранить только имя внутри станции вместо ссылки, а затем искать по имени нужное окружение?

Veso Alex 22.03.2022 13:36

Другие вопросы по теме