如何找到我的对象被冻结的位置?

时间:2019-05-13 13:32:51

标签: javascript react-native expo

我收到此错误:

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.

如何发现直接或间接冻结对象并使其不可变的代码?

我已经通过完全重写逻辑解决了开发中的错误,但是我想了解如何调试这种类型的错误。

1 个答案:

答案 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");