TypeError: can't define property "x": "obj" is not extensible(Тип ошибки:не удается определить свойство "x": "obj" не является расширяемым)

 

TypeError: не удается создать свойство для нерасширяемого объекта (Edge)
TypeError: не удается определить свойство "x": "obj" не является расширяемым (Firefox)
TypeError: не удается определить свойство: "x", объект не является расширяемым. (Chrome)

Тип ошибки

TypeError

Что произошло не так?

Usually, an object is extensible and new properties can be added to it. However, in this case Object.preventExtensions() marked an object as no longer extensible, so that it will never have properties beyond the ones it had at the time it was marked as non-extensible.

Примеры

В строгом режиме при попытке добавить новые свойства в нерасширяемый объект возникает ошибка TypeError. В небрежном режиме добавление свойства "x" игнорируется.

'use strict';

var obj = {};
Object.preventExtensions(obj);

obj.x = 'foo';
// TypeError: can't define property "x": "obj" is not extensible

В обоих, строгий режим и коряво режим, вызов Object.defineProperty() бросает при добавлении нового свойства в нерасширяемый объект.

var obj = { }; 
Object.preventExtensions(obj); 

Object.defineProperty(obj, 
  'x', { value: "foo" }
);
// TypeError: can't define property "x": "obj" is not extensible

Чтобы исправить эту ошибку, необходимо удалить вызов Object.preventExtensions() полностью или переместите его в положение, чтобы свойство добавлялось раньше и только позже объект помечался как нерасширяемый. Конечно, вы также можете удалить свойство, которое пытались добавить, если оно вам не нужно.

'use strict'; 

var obj = {}; 
obj.x = 'foo'; // add property first and only then prevent extensions

Object.preventExtensions(obj);

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