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. Отображения и наборы
   188   189   190   191   192   193   194   195   196   197   198