我正在从使用老旧的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
。
在其余代码中,继续区分设置方法的名称和存储数据的内部属性。