为什么即使在 getter 和 setter 方法中发生堆栈溢出错误后,我的其余代码仍然可以在 JavaScript 中工作?

问题描述 投票:0回答:1

我目前正在学习 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”。非常感谢您的帮助!

javascript class getter-setter
1个回答
-1
投票

您不应该为您的字段和设置者命名相同的名称,否则它将被覆盖。考虑将

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);

© www.soinside.com 2019 - 2024. All rights reserved.