I have a logic that need to reactively run some function
if a this.variableName
is changed inside or outside the class
the problem is with this logic, getter doesn't work, and I get undefined
.
not only this, but also maximum stack error.
because is like: set the this
inside the setter, that re-set the this
, that re-call another time the setter, that set the this, and so on... (but this isn't what I meant)
Semplified version, without parameters, and so, just the minimal example of the bug.
class MyClass {
constructor() {
this.isOn = false;
}
set isOn(value) {
this.isOn = value;
// another functions that do stuff. you can put here a bunch of console.logs if you want just for the demo
}
// the idea is another, but i will show you the simpliest method, I could imagine, just to make you get the idea
turnOn() {
this.isOn = true;
}
turnOff() {
this.isOn = false;
}
// using this approach,
// I don't need to copy paste the same functions in this 2 methods,
// so I just need to care about the var,
// without using a imperative approach,
// but a declarative approach
}
I know we can use _isOn,
but this is literally the opposite of what we want,
because I want the setter to be the same name of the getter,
and still do the logic on setter.
hope you get my idea. thanks
You can use private properties
class MyClass {
#isOn = false;
set isOn(value) {
this.#isOn = value;
}
get isOn() {
return this.#isOn
}
turnOn() {
this.isOn = true;
}
turnOff() {
this.isOn = false;
}
}
const x = new MyClass
x.isOn = true
console.log(x.isOn)
// This will throw an error:
// console.log(x.#isOn)