Search code examples
javascriptclassconstructortypeerrorgetter-setter

Cannot Set Property ... Which Only Has Getter (javascript es6)


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?


Solution

  • 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.