Каталог
Веб-разработка с нуля: четыре курса по порядку.
HTML, затем CSS, JavaScript и SQL. Каждый курс говорит, что нужно знать до него и что вы будете уметь после.
Загружаем курсы…
Каталог
HTML, затем CSS, JavaScript и SQL. Каждый курс говорит, что нужно знать до него и что вы будете уметь после.
Загружаем курсы…
Урок 95 из 114 · 6 мин
new Proxy с ловушками get, set, has, deleteProperty, apply, construct и Proxy.revocable.
prices.pen = -100 — и вы ещё и доплачиваете покупателю! Хе-хе.
Proxy — обёртка, которая видит каждую операцию с объектом и может её остановить.
Proxynew Proxy(target, handler) — каждая операция (чтение get, запись set, in — has, delete — deleteProperty, вызов apply, new — construct…) проходит через метод-ловушку handler.const menu = new Proxy({ latte: 220 }, {
get: (t, key) => key in t ? t[key] : "нет в меню",
set(t, key, value) {
if (value < 0) throw new RangeError("Цена не может быть отрицательной");
t[key] = value;
return true;
}
});
console.log(menu.latte, menu.raf);
try { menu.latte = -1; } catch (e) { console.log(e.message); }Proxy.revocable(){ proxy, revoke }; после revoke() любая операция с proxy — TypeError.const { proxy, revoke } = Proxy.revocable({ secret: 42 }, {});
console.log(proxy.secret);
revoke();
try { proxy.secret; } catch (e) { console.log(e.name); }Proxy — для сквозных правил (валидация, логи). Для обычной логики достаточно классов и геттеров.
Сделай guarded(obj): Proxy, где set бросает RangeError на отрицательную или не числовую цену, а get для отсутствующего ключа возвращает 0.
Выберите один ответ.
Что должна вернуть ловушка set при успешной записи?
Проверяем состояние обучения…