【发布时间】:2021-01-24 01:53:19
【问题描述】:
我正在从使用旧的 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);
它给了我错误: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; 行)。
有什么想法吗?
【问题讨论】:
-
你为什么在这里使用getter/setter?你不需要它们。
-
他们是很好的做法,对吧?此外,我计划很快实现验证,并且没有涉及在很多地方更改代码的设置器。有什么理由不使用它们?
-
不,当他们不做任何特别的事情时,它们不是好习惯(此外,它们相当慢)。他们只是使代码复杂化。是的,你可以在当你实现验证时使用它们,这很好,但你不应该在然后之前使用它们。