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.