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 });