Почему я могу установить [перечислимость и] возможность записи неконфигурируемых дескрипторов свойств?
https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/defineProperty состояния:
конфигурируемый: True, если и только если тип этого дескриптора свойства может быть изменен и если свойство может быть удалено из соответствующего объекта. По умолчаниюfalse
.
Итак, у меня есть
var x = Object.defineProperty({}, "a", {
value:true,
writable:true,
enumerable:true,
configurable:false
});
Теперь я могу играть сx.a = false
, for(i in x)
и т.д. Но даже если дескрипторявляется должен быть неконфигурируемым, я могу сделать
Object.defineProperty(x, "a", {writable:true}); // others defaulting to false
Object.defineProperty(x, "a", {}); // everything to false
Object.freeze(x); // does the same to the descriptors
С другой стороны, установив их снова в значение true или попытавшись определить дескриптор средства доступа, теперь возникают ошибки. Если быть точным:Object.defineProperty: invalid modification of non-configurable property
.
Почему я могу «понизить» дескрипторы, хотя они говорят, что они не настраиваются?