Page 339 - Браун Э. - Изучаем JavaScript. Руководство по созданию современных веб-сайтов - 2017
P. 339
• Атрибут enumeraЫe (перечислимый) определяет, будет ли свойство участво
вать в перечислении свойств объекта (с использованием for . . in, Obj ect .
.
keys или оператора расширения).
• Атрибут configuraЫe (перестраиваемый) определяет, может ли свойство
быть удалено из объекта или могут ли быть изменены его атрибуты.
Мы можем управлять атрибутами свойства, используя метод Obj ect . def i n e
r
P r ope t y . Он позволяет создавать новые свойства или изменять существующие
(если это свойство перестраиваемое).
Например, чтобы сделать свойство foo объекта obj доступным только для чте
ния, можно использовать Ob e ct . defineProperty так.
j
Obj ect . defineProperty { o bj , ' f o ' , { writaЫe : false } ) ;
o
Т е перь, если мы попытаемся присвоить значение свойству foo, то получим ошибку.
obj . f oo = З ;
1 1
TypeError : Нельзя присваивать значение свойству 'foo ' , доступному только чтение
Попытка изменить значение свойства только для чтения закончится
ошибкой только в строгом режиме. В нестрогом режиме ничего при
своено не будет, но и ошибки при этом тоже не будет.
f
Мы можем также использовать метод Obj ect . de i neProperty для добавления
к объекту нового свойства. Это особенно полезно для свойств с атрибутами, поскольку
в отличие от свойств данных нет никакого другого способа добавить свойство доступа
после того, как объект был создан. Давайте добавим к объекту obj свойство color (на
сей раз мы не будем заботиться о символах или проверке правильности).
Obj ect . defineProperty { o bj , ' c olo ' , {
r
ge : function { ) { return this . color ; } ,
t
set : function { v alue ) { thi s . color = value ; } ,
} ) ;
Чтобы создать свойство данных, нужно указать его значение в параметрах при
вызове Object . defineProperty. Добавим к объекту obj свойства name и greet.
e
{
Obj ect . defineProperty o bj , ' n am ' , {
value : ' C ynthia ' ,
} ) ;
{
Obj ect . defineProperty o bj , ' g reet ' , {
value : function ( ) { return ' П риве , меня зовут $ { this . n am } ! ' ; }
т
e
} ) ;
Один из популярных случаев применения Obj ect . def i neProperty - это сде
лать свойства неперечислимыми в массиве. Мы упоминали прежде, что не стоит
342 Глава 2 1 . Свойства объекта и nрокси-объекты

