Как бы вы могли получить доступ или переопределить частное свойство базового класса внутри объявления производного класса?

Как бы вы сделали это без:

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

Свойства должны оставаться по-настоящему частными, за исключением объявления производного класса, поэтому вы не можете использовать защищенную переменную подчеркивания _ соглашение.

Предположим, у меня есть следующий код

      class CoffeeMachine {
  #waterLimit = 600;
  #waterAmount = 0;

  constructor() {}

  set waterAmount(amount) {
    if (amount < 0) {
      this.#waterAmount = 0;
    } else if (amount > this.#waterLimit) {
      this.#waterAmount = this.#waterLimit;
    } else {
      this.#waterAmount = amount;
    }
  }

  get waterAmount() {
    return this.#waterAmount;
  }
}

class TeaMachine extends CoffeeMachine {
  constructor() {
    super();
  }
}

Я бы хотел TeaMachine быть меньше, поэтому я хочу, чтобы это было #waterLimit равно 400 вместо того 600

Простое выполнение следующих действий не работает

      class TeaMachine extends CoffeeMachine {
  #waterLimit = 400;
  constructor() {
    super();
  }
}

const teaBox = new TeaMachine();
teaBox.waterAmount = 1000;
console.log(teaBox.waterAmount); // 600

Это самое близкое, что я мог найти

Лимит воды устанавливается при запуске, но после этого становится недоступен. Хотя, очевидно, это не идеальное решение

      class CoffeeMachine {
  #waterLimit;
  #waterAmount = 0;

  constructor(limit = 600) {
    this.#waterLimit = limit;
  }
}

class TeaMachine extends CoffeeMachine {
  constructor() {
    super(400);
  }
}

const teaBox = new TeaMachine();
teaBox.waterAmount = 1000;
console.log(teaBox.waterAmount); // 400

Я считаю, что это возможно в Java

Возможно ли это сделать в JavaScript при соблюдении вышеупомянутых условий? Или мне придется просто принять ограничения языка / спуститься WeakMap маршрут?

0 ответов

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