Page 337 - Браун Э. - Изучаем JavaScript. Руководство по созданию современных веб-сайтов - 2017
P. 337
Единственное, что в этом примере заставляет нас использовать два метода (вме
сто обычного свойства данных), - это предотвращение присваивания свойству
USER _ EMAIL недопустимого адреса электронной почты. Здесь мы используем сим
вольное свойство, чтобы блокировать случайный прямой доступ к свойству данных,
содержащему адрес электронной почты. Если бы мы назвали строковое свойство
a
a
em i l или даже _ em i l , то было бы довольно просто по небрежности обратиться
к нему непосредственно.
Это типичный сценарий использования, и он прекрасно работает, но несколько
громоздким, чем нам хотелось бы. Вот пример использования этого класса.
const u = new User ( ) ;
u . setEma l ( " j o hn@doe . com" ) ;
i
g
console . l o ( ' Aдpec пользователя : $ { u . getEmail ( ) } ' ) ;
Хотя это вполне сработает, было бы естественнее написать
const u = new User ( ) ;
i
u . e ma l = " j ohn@doe . c om" ;
console . l o ( ' Aдpec пользователя : $ { u . e mai } ' ) ;
l
g
Введем свойства доступа: они позволят сохранить преимущества прежнего под
хода с естественным синтаксисом последнего. Давайте перепишем наш класс, ис
пользуя свойства доступа.
const USER_EМAIL = SymЬol ( ) ;
class User {
s e t email ( v alue ) {
e
e
i f ( ! / @ / . t est ( v alu ) ) throw new Еrrоr ( ' Неправильный адре : $ { v alu } ' ) ;
с
L
this [USER_EМAI ] = value ;
get email ) {
(
return this [ U SER_EМAIL] ;
a
Мы создали две разные функции, но они связаны с единым свойством em i l .
Если значение свойству присваивается, то вызывается функция установки значения
(с передачей присваиваемого значения в качестве первого аргумента), а если значе
ние свойства запрашивается, то вызывается функция получения значения.
Можно создать функцию-получатель без функции-установщика значения; рас
смотрим, например, функцию-получатель, которая возвращает периметр прямоу
гольника.
class Rectangle
constructor (width, height )
th s . width = width ;
i
th s . height = height ;
i
340 Глава 2 1 . Свойства объекта и п р окси-объекты

