¿Cómo harías esto sin:
Las propiedades deben permanecer verdaderamente privadas, excepto dentro de la declaración de clase derivada, por lo que no puede usar la convención de subrayado de variable protegida _ .
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(); } } Me gustaría que la TeaMachine fuera más pequeña, así que quiero que sea #waterLimit igual a 400 en lugar de 600
class TeaMachine extends CoffeeMachine { #waterLimit = 400; constructor() { super(); } } const teaBox = new TeaMachine(); teaBox.waterAmount = 1000; console.log(teaBox.waterAmount); // 600El límite de agua se establece en el inicio, pero ya no es accesible después. Aunque obviamente esta no es una solución perfecta.
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); // 400Creo que esto es posible en Java
¿Es posible hacer esto en JavaScript mientras se cumplen las condiciones mencionadas anteriormente? ¿O tendré que aceptar las restricciones del idioma / seguir la ruta de WeakMap ?