我正在从使用老旧的JavaScript类(函数和原型(prototype))过渡到新的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;行)。

有任何想法吗?

最佳答案

您可以通过设置playerNo进行递归。

playerNo setter 中,尝试设置this._playerNo = 0

在其余代码中,继续区分设置方法的名称和存储数据的内部属性。

08-26 18:50