Page 340 - Браун Э. - Изучаем JavaScript. Руководство по созданию современных веб-сайтов - 2017
P. 340
использовать строковое или символьное свойство в массиве, поскольку это противо
речит самой идее применения массива, но это может быть полезно, если сделано осто
.
рожно и осмысленно. Хотя применение цикла for . . in или Object . keys для массива
.
также не очень хорошо (вместо них рекомендуется использовать for, for . . of или
a
Arr y . prototype . forEach), вы не можете запретить людям ими пользоваться. Поэто
му, добавляя нечисловые свойства к массиву, необходимо делать их неперечислимыми
.
на случай, если кто-то (по неосторожности) воспользуется массивом for . . in или
Obj ect . keys. Вот пример добавления к массиву методов sum и avg.
const arr = [ 3 , 1 . 5 , 9 , 2 , 5 . 2 ] ;
i
arr . sum = function ( ) { return th s . reduce ( ( a , х ) => а+ ) ;
х
m
arr . avg = function ( ) { return this . s u ( ) /this . length;
e
Obj ect . defineProperty a rr, ' s u ' , { enumeraЫ : false } ) ;
(
m
(
g
Obj ect . defineProperty a rr, ' a v ' , { enumeraЬle : false } ) ;
Мы моrли бы также сделать это за один этап для каждого свойства.
const arr = [ 3 , 1 . 5 , 9, 2 , 5 . 2 ] ;
Obj ect . definePropert ( arr, ' s u ' , {
m
y
value : function ( ) { return this . reduce ( ( а , х ) => а+ ) ; ) ,
х
e
enumeraЫ : false
} ) ;
y
Ob e ct . definePropert ( arr, ' a v ' , {
j
g
h
m
value : function ( ) { return this ; s u ( ) /this . lengt ; } ,
enumeraЫe : false
} ) ;
Наконец есть также метод Obj ect . defineProperties (обратите внимание на на
звание во множественном числе!), который позволяет определить сразу несколько
свойств для объекта. Таким образом, мы можем переписать предыдущий пример как
const arr = [ 3 , 1 . 5 , 9 , 2 , 5 . 2 ] ;
Obj ect . defineProperties ( a rr,
sum : {
value : function ( ) { return this . reduce ( ( а , х ) => а+х ) ; } ,
e
enumeraЫ : false
} ) ,
avg : {
m
i
value : function ( ) { return this . s u ( ) /th s . length; } ,
enumeraЫe : false
} )
) ;
Защита объектов: заморажив а н и е ,
запечатыв а н и е и запрет расш и р е н и я
Гибкая природа языка JavaScript позволяет создавать очень мощный код, однако
одновременно она является и причиной всех проблем. Поскольку любой код в любом
Защита объектов: замораживание, запечатывание и запрет расширения 343

