Uncaught TypeError: Impossible de définir la propriété playerNo de # qui n'a qu'un getter sur la ligne 4

Je me déplace à partir de l'aide de l'hacky classes JavaScript de vieux (les fonctions et les prototypes) à la nouvelle ES6 classes.

Je vais sans doute faire quelque chose de stupide, mais je ne sais pas pourquoi je ne suis pas autorisé à le faire:

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);

Il me donne l'erreur: Uncaught TypeError: Cannot set property playerNo of # which has only a getter on line 4

Donc, j'ai essayé de le ci-dessous:

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);

Qui me donne: Uncaught RangeError: Maximum call stack size exceeded on line 6 (qui est la ligne this.playerNo = no;).

Des idées?

Pourquoi êtes-vous à l'aide des getters/setters ici? Vous n'en avez pas besoin.
Ils sont de bonne pratique, non? Aussi, j'ai l'intention de mettre en œuvre la validation bientôt, et sans setters qui impliquerait la modification du code dans beaucoup d'endroits. Quelles sont les raisons de ne pas les utiliser?
Non, ils ne sont pas les bonnes pratiques lorsqu'ils ne font rien de spécial (et en outre, ils sont plutôt lent). Ils ont juste compliquer le code. Oui, vous pouvez utiliser si, vous pouvez mettre en œuvre la validation, c'est très bien, mais vous ne devriez pas les utiliser jusqu'à ce que .

OriginalL'auteur Jonah | 2016-04-11