Answer
t.me/js_testОтвет:
function wrap(target) { return new Proxy(target, { get: (target, prop, receiver) => prop in target ? Reflect.get(target, prop, receiver) : (() => { throw new ReferenceError(`Error! Property ${prop} doesn't exist.`); })(), }); }
Обьяснение:
Сигнатура создания Proxy: new Proxy(target, handler), где в качестве handler может выступать: get
– для чтения свойства из target
, ловушка set
– для записи свойства в target
и так далее. При обращении к свойству обьекта (target)
, имя этого свойства попадает в качестве второго аргумента (prop)
в функцию get
- с помощью конструкции in проверям, есть ли такое свойство у обьекта: если есть - возвращаем значение свойства с помощью Reflect.get(target, prop, receiver)
; если нет - выбрасываем ошибку.
Код для проверки:
let user = { name: "Ivan", }; function wrap(target) { return new Proxy(target, { get: (target, prop, receiver) => prop in target ? Reflect.get(target, prop, receiver) : (() => { throw new ReferenceError(`Error! Property ${prop} doesn't exist.`); })(), }); } user = wrap(user); console.log(user.name); // Ivan console.log(user.age); // Error! Property age doesn't exist.