So I have a simple Javascript class
class MyClass {
constructor(x) {
this.x = x === undefined ? 0 : x;
}
get x() {
return this.x;
}
}
When a MyClass is created, I want it's x to be set to the value passed in as a parameter. After this, I do not want it to be able to be changed, so I have intentionally not made a set x() method.
However, I guess I must be missing something fundamental, as this is giving me the "Cannot set property ... which only has getter" error.
How do I assign a value to x without creating a setter method?
There are a couple problems here.
When you make a getter via get x()
you are causing this.x
to result in calling the getter, which will recurse indefinitely due to your get x()
doing this.x
.
Replace your references to this.x
with this._x
in this code like this:
class MyClass {
constructor(x) {
this._x = x === undefined ? 0 : x;
}
get x() {
return this._x;
}
}
Now your encapsulated x
which is now _x
will not be confused for a call to the getter via this.x
.