我收到此错误:
Error: You attempted to set the key `TpDeF3wd6UoQ6BjEFmwz` with the value `{"seen":true}` on an object that is meant to be immutable and has been frozen.
如何发现直接或间接冻结对象并使其不可变的代码?
我已经通过完全重写逻辑解决了开发中的错误,但是我想了解如何调试这种类型的错误。
答案 0 :(得分:3)
有一个想法是用自己的Object.freeze
替换日志堆栈,然后调用旧的冻结。
下面是一个示例,您可以在30:8
此代码段中的行号不对齐,仅是因为SO代码段将添加一些额外的包装器代码,但是在生产中,这应该为您提供正确的行号。
'use strict';
function DebugFreeze() {
const oldFree = Object.freeze;
Object.freeze = (...args) => {
console.log(new Error("Object Frozen").stack);
return oldFree.call(Object, ...args);
}
}
DebugFreeze();
const a = { one: 1 };
a.two = 2;
Object.freeze(a);
a.three = 3;
console.log("here");