Page 193 - Браун Э. - Изучаем JavaScript. Руководство по созданию современных веб-сайтов - 2017
P. 193
опасность, что при переборе произойдет доступ к объекту, который уже был унич
тожен в процессе сборки мусора).
Благодаря этим свойствам объект WeakMap применяется для хранения закрытых
ключей в экземплярах объекта.
const SecretHolder = ( f unction ( )
const secrets = new WeakМap ( ) ;
return class {
e
setSecret ( secr t ) {
t
t
secre s . set ( t h i s , secre ) ;
(
getSecret ) {
s
return secrets . g et ( t hi ) ;
} ) ( ) ;
Здесь мы поместили свой объект WeakMap в немедленно вызываемое функцио
нальное выражение (IIFE) наравне с классом, который его использует. Вне IIFE мы
получаем класс SecretHold r , экземпляры которого способны хранить секреты. Мы
e
можем установить секрет, только используя метод setSecret, а получить к нему до
ступ - только через метод getSecret.
const а new SecretHolder ( ) ;
const Ь = new SecretHolder ( ) ;
a . setSecret ( ' secret А ' ) ;
b . setSecret ( ' secret В ' ) ;
a . getSecret ( ) ; 1 1 "secret А"
b . getSecret ( ) ; 1 1 "secret В"
Мы могли бы использовать обычный объект Мар, но сообщенные его экземпля
рам SecretHolder секреты никогда не будут уничтожены в процессе сборки мусора!
Наборы
Набор (set) - это коллекция данных, в которой дубликаты недопустимы. Ис
пользуя наш предыдущий пример, мы можем назначить пользователя на несколько
ролей. Например, у всех пользователей могла бы быть роль "User", а у администра
торов - и " U s e r " , и "Adrnin". Однако для пользователя нет никакого логического
смысла иметь одну и ту же роль многократно. Набор - идеальная структура данных
для этого случая.
Сначала создайте экземпляр объекта Set.
const roles = new Se ( ) ;
t
1 9 4 Глава 10. Отображения и наборы

