Я пытаюсь изучить javascript и видел, что мы можем играть с атрибутами свойств объекта. (i означает значение, записываемый, перечислимый, настраиваемый).
И из того, что я узнал, я подумал, что изменение {configurable: false} ограничило бы любые изменения конфигурации, такие как {writable: false, enumerable: false}
Я написал ниже, чтобы попробовать, но результаты, которые я получил, не были похожи на результаты, которые я ожидал.
Я ошибаюсь в отношении того, что означает {configurable: false}, или есть что-то не так с кодом? ТИА.
"use strict";
window.onload = function(){
var o = {x:1};
//Make "x" non-configurable
Object.defineProperty(o, "x", {configurable: false});
//Seal "o";
Object.seal(o);
console.log(Object.getOwnPropertyDescriptor(o, "x"));
//outputs => Object { value: 1, writable: true, enumerable: true, configurable: false }
console.log(Object.isSealed(o));
//outputs => true
Object.defineProperty(o, "x", {writable: false}); //this doesn't cause any errors.
console.log(Object.getOwnPropertyDescriptor(o, "x"));
//outputs => Object { value: 1, writable: false, enumerable: true, configurable: false }
}
MDN - печать
Настраиваемый атрибут
Конфигурируемый атрибут одновременно контролирует, может ли свойство быть удалено из объекта и могут ли быть изменены его атрибуты (кроме записываемых на false)Объект Object.seal()
метод запечатывает объект, предотвращая добавление новых свойств и маркировку всех существующих свойств как неконфигурируемых. Значения текущих свойств могут быть изменены до тех пор, пока они доступны для записи.
Вам нужно freeze
MDN - замораживание
Сравнение с Object.seal() Объектами, запечатанными Object.seal(), может быть изменено их существующее свойство. Существующие свойства объектов, замороженных с помощью Object.freeze(), становятся неизменными.
"use strict";
window.onload = function(){
var o = {x:1};
//Make "x" non-configurable
Object.defineProperty(o, "x", {configurable: false});
//freeze "o";
Object.freeze(o);
console.log(Object.getOwnPropertyDescriptor(o, "x"));
//outputs => Object { value: 1, writable: true, enumerable: true, configurable: false }
console.log(Object.isSealed(o));
//outputs => true
Object.defineProperty(o, "x", {writable: true}); //Now this doesn't cause.
console.log(Object.getOwnPropertyDescriptor(o, "x"));
//outputs => Object { value: 1, writable: false, enumerable: true, configurable: false }
}
seal
позволяет редактировать существующие свойства.