This page was translated from English by the community. Learn more and join the MDN Web Docs community.

View in English Always switch to English

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)

Тип ошибки

TypeError

Что не так?

Была предпринята попытка переопределить свойство, но это свойство не настраивается. Атрибут "настраиваемости" определяет, можно ли удалить свойство из объекта и можно ли изменить другие его атрибуты (отличные от доступных для записи). Обычно, свойства объекта, созданного инициализатором объекта, настраиваются. Однако, например, при использовании 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 });

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