我需要冻结一个对象/数组,以使其无法以任何方式进行突变。 Object.freeze()
几乎是完美的:
const arr = [];
const obj = { foo: "bar" };
let frozenArr = Object.freeze(arr);
let frozenObj = Object.freeze(obj);
// Uncaught TypeError: Cannot add property 0, object is not extensible
frozenArr.push('abc');
// Uncaught TypeError: Cannot add property x, object is not extensible
frozenObj.x = 'abc';
问题是,我想抛出一个自定义错误,该错误将向开发人员解释为什么对象被冻结,如何处理等...
我当时在考虑使用Proxy
或Object.defineProperties()
并在设置器中手动抛出错误,但是我不想重新发明轮子,因此这里提出了我的问题。也许有人已经有了解决方案。