作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
有没有办法对一个对象强制执行部分不变性,如果有人试图改变它就会抛出错误?
例如,let obj = {a: 1, b: 2}
我想要 obj.a
和 obj.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/
我是一名优秀的程序员,十分优秀!