How would you do this without:
The properties should remain truly private except within the derived class declaration, so you can't use the protected variable underscore _ convention.
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();
}
}
I would like the TeaMachine to be smaller, so I want it's #waterLimit equal to 400 instead of 600
class TeaMachine extends CoffeeMachine {
#waterLimit = 400;
constructor() {
super();
}
}
const teaBox = new TeaMachine();
teaBox.waterAmount = 1000;
console.log(teaBox.waterAmount); // 600
The water limit is set on initiation, but is no longer accessible afterwards. Though obviously this is not a perfect solution
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
I believe this is possible in Java
Is it even possible to do this in JavaScript while meeting the aforementioned conditions?
Or will I have to just accept the restrictions of the language / go down the WeakMap route?