Uncaught TypeError: невозможно установить свойство playerNo из #, которое имеет только получатель в строке 4

Я перехожу от использования хакерских классов JavaScript старых (функций и прототипов) к новым классам ES6.

Я, наверное, делаю что-то глупое, но я не уверен, почему мне не разрешено это делать:

class Player{
    constructor(playerNo){
        this.playerNo = playerNo;
    }    
    get playerNo(){
        return this.playerNo;
    }

    set cards(playersCards){
        this.cards = playersCards;
    }
    get cards(){
        return this.cards;
    }
}

var steve = new Player(1);

Это дает мне ошибку: Uncaught TypeError: Cannot set property playerNo of # which has only a getter on line 4

Итак, я попробовал следующее:

class Player{
    constructor(playerNo){
        this.playerNo = playerNo;
    }   
    set playerNo(no){
        this.playerNo = no;
    }
    get playerNo(){
        return this.playerNo;
    }

    set cards(playersCards){
        this.cards = playersCards;
    }
    get cards(){
        return this.cards;
    }
}

var steve = new Player(1);

Что дает мне: Uncaught RangeError: Maximum call stack size exceeded on line 6 (это строка this.playerNo = no;).

Любые идеи?

Ответ 1

У вас есть рекурсия с настройкой playerNo.

В настройщике playerNo попробуйте установить this._playerNo = 0.

В остальной части кода продолжайте делать различие между именем метода setter и внутренним свойством, которое хранит данные.