Как бы вы могли получить доступ или переопределить частное свойство базового класса внутри объявления производного класса?
Как бы вы сделали это без:
- публичное раскрытие частного свойства базового класса через сеттеры и геттеры, такие как в этом ответе
- или необходимость дублировать любые соответствующие методы и свойства базового класса в производный класс
Свойства должны оставаться по-настоящему частными, за исключением объявления производного класса, поэтому вы не можете использовать защищенную переменную подчеркивания
_
соглашение.
Предположим, у меня есть следующий код
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
маршрут?