提问人:Ana 提问时间:9/27/2023 最后编辑:VLAZAna 更新时间:9/27/2023 访问量:37
为什么即使在堆栈溢出错误之后,在 getter 和 setter 方法中,我的其余代码仍然在 JavaScript 中工作?
Why is it that even after a stack overflow error, in getter and setter methods, the rest of my code still works in JavaScript?
问:
我目前正在学习 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”。非常感谢您的帮助!
答:
1赞
Vivick
9/27/2023
#1
来自 MDN :
Getter 属性是在类的 prototype 属性上定义的,因此由类的所有实例共享。
因此,在查找属性时,它会在 getter/setter 对之前找到实例。你永远无法接触到他们。
评论
msg