未捕获的TypeError:无法设置在第4行只有一个getter的#的属性playerNo

Jon*_*nah 19 javascript ecmascript-6

我正在使用旧的(函数和原型)hacky 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);
Run Code Online (Sandbox Code Playgroud)

它给了我错误: 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);
Run Code Online (Sandbox Code Playgroud)

这给了我:( Uncaught RangeError: Maximum call stack size exceeded on line 6这是线this.playerNo = no;).

有任何想法吗?

Mar*_*erg 21

你有设置的递归playerNo.

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

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

  • 我会让构造函数设计直接设置属性.略微更直接,不会将内部财产暴露给公众. (3认同)