Page 345 - Браун Э. - Изучаем JavaScript. Руководство по созданию современных веб-сайтов - 2017
P. 345
t
be t erCoefficients . d; // О
betterCoefficients . anything ; // О;
По существу, мы создали прокси-объект для нашего объекта coefficients, кото
рый способен иметь бесконечное количество свойств (все устанавливаются равными
О, кроме тех, которые были определены явно)!
Мы могли бы еще несколько улучшить свой прокси-объект, чтобы он обрабаты
вал только свойства, имена которых состоят из одиночных строчных букв.
const betterCoefficients = new Proxy ( c oefficients , {
y
e
get ( targ t , ke ) {
if ( ! / л [ a -z ] $ / . t est ( k ey) ) return target [ k ey] ;
return target k ey] 1 1 О ;
[
} ,
} ) ;
Вместо простой проверки а существование свойства target k ey] м ы могли бы
[
н
возвращать О, если его значение не является числом .. Я оставляю это упражнение
.
для читателя.
Т о чно так же мы можем перехватить свойства (или методы доступа), устанавливае
мые обработчиком set. Давайте рассмотрим пример, в котором у объекта имеются опас
ные свойства. Мы хотим воспрепятствовать установке значений этих свойств и вызову
методов-установщиков без дополнительного этапа контроля. Дополнительным этапом
контроля, который мы будем использовать перед обращением к опасным функциям, яв
ляется установка свойства allowDangerousOperations равным значению t r ue.
const cook = {
name : "Wa t " ,
l
redPhosphorus : 1 0 0 , // опасно
water : 5 0 0 , // безопасно
} ;
const protectedCook new Proxy ( c ook,
set ( t arget , key, value ) {
if ( k e y === ' r edPhosphorus ' ) {
i f ( t arget . a llowDangerousOperations )
return targe . redPhosphorus = value ;
t
else
о
return console . l og ( "Oчeнь опасн ! " ) ;
}
/ / в с е остальные свойства безопасны
target [ k ey] = value ;
} ,
} ) ;
o
protectedCo k . w ater = 5 5 0 ; 11 550
а
protectedCoo . redPhosphorus 1 5 0 ; // Очень оп с но !
k
348 Глава 21 . Свойства объекта и прокси-объекты

