Answer

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.




Report Page