gpt4 book ai didi

javascript - 强制执行不会静默失败的不变性或部分不变性

转载 作者:搜寻专家 更新时间:2023-11-01 05:09:33 24 4
gpt4 key购买 nike

有没有办法对一个对象强制执行部分不变性,如果有人试图改变它就会抛出错误?

例如,let obj = {a: 1, b: 2} 我想要 obj.aobj.b是不可变的,但仍然允许将更多键添加到 obj,即允许 obj.c = 3

我想到了在子对象中嵌套属性并像这样使用 Object.freeze:

let obj = {subObj:{a: 1, b:2}}; 
Object.freeze(obj.subObj);

但它似乎在之后默默地失败了,即 obj.subObj.a = 3 没有改变 a 但也没有给出任何问题的迹象.有没有办法强制它抛出错误?

最佳答案

做到这一点的简单方法是使用返回静态值的 getter 和抛出错误的 setter 。

let obj = {
get a() {
return 1;
},
set a(val) {
throw new Error('Can\'t set a');
},
get b() {
return 2;
},
set b(val) {
throw new Error('Can\'t set b');
}
};
obj.c = 3; // works
console.log(obj);
obj.a = 4; // throws an error

关于javascript - 强制执行不会静默失败的不变性或部分不变性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43961192/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com