TypeError: 无法重新定义不可配置属性“x”

当尝试重新定义属性时,会发生 JavaScript 异常“无法重新定义不可配置的属性”,但该属性是 不可配置的

信息

TypeError: Cannot redefine property: "x" (V8-based)
TypeError: can't redefine non-configurable property "x" (Firefox)
TypeError: Attempting to change value of a readonly property. (Safari)

错误类型

问题出在哪里?

尝试重新定义属性时,发现该属性是 不可配置的configurable 属性控制是否可以从对象中删除该属性,以及是否可以更改其属性(除了 writable)。通常,由 对象初始化程序 创建的对象中的属性都是可配置的。但是,例如,当使用 Object.defineProperty() 时,属性默认情况下不可配置。

示例

由 Object.defineProperty 创建的不可配置属性

如果您没有将它们指定为可配置,则 Object.defineProperty() 会创建不可配置的属性。

js
const obj = Object.create({});
Object.defineProperty(obj, "foo", { value: "bar" });

Object.defineProperty(obj, "foo", { value: "baz" });
// TypeError: can't redefine non-configurable property "foo"

如果您打算稍后在代码中重新定义“foo”属性,则需要将其设置为可配置。

js
const obj = Object.create({});
Object.defineProperty(obj, "foo", { value: "bar", configurable: true });
Object.defineProperty(obj, "foo", { value: "baz", configurable: true });

另请参阅