我目前正在学习 Javascript 中的 setter 和 getter,但遇到了一个问题。我在类中命名了一个与我的 get 和 set 方法同名的属性,我知道这可能会导致递归并导致堆栈溢出,但为什么即使在堆栈溢出之后“msg”仍然被分配给“Sandra”错误?
class ClassWithGetSet{
msg = 'Hello';
get msg(){
return this.msg;
}
set msg(x){
this.msg = `Hello ${x}`;
}
}
const instance = new ClassWithGetSet();
console.log(instance.msg);
instance.msg = 'Sandra';
console.log(instance.msg);
我预计 Chrome DevTools 控制台上会输出错误,但它却打印了“Hello”,然后打印了“Sandra”。非常感谢您的帮助!
您不应该为您的字段和设置者命名相同的名称,否则它将被覆盖。考虑将
msg
字段命名为其他名称或使用 私有字段:
class ClassWithGetSet{
#msg = 'Hello';
get msg(){
return this.#msg;
}
set msg(x){
this.#msg = `Hello ${x}`;
}
}
const instance = new ClassWithGetSet();
console.log(instance.msg);
instance.msg = 'Sandra';
console.log(instance.msg);