TypeError: can't redefine non-configurable property "x"

Исключение "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)

Тип ошибки

Что не так?

Была предпринята попытка переопределить свойство, но это свойство не настраивается. Атрибут "настраиваемости" определяет, можно ли удалить свойство из объекта и можно ли изменить другие его атрибуты (отличные от доступных для записи). Обычно, свойства объекта, созданного инициализатором объекта, настраиваются. Однако, например, при использовании Object.defineProperty(), заданное свойство по умолчанию ненастраиваемое.

Примеры

Ненастраиваемые свойства, созданные Object.defineProperty

The 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" как настраиваемое (configurable: true), если вы собираетесь переопределить его позже в коде.

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

Смотрите также