TypeError: can't redefine non-configurable property "x"
当尝试重新定义一个属性,但该属性是不可配置的时候,就会出现 JavaScript 异常“can't redefine non-configurable property”。
消息
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)
错误类型
TypeError
哪里出错了?
尝试重新定义一个属性,但该属性是不可配置的。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 });