返回课程

读取不存在的属性时出错

通常,尝试读取不存在的属性会返回 undefined

创建一个代理,在尝试读取不存在的属性时抛出错误。

这有助于尽早发现编程错误。

编写一个函数 wrap(target),它接受一个对象 target 并返回一个代理,该代理添加了此功能方面。

这就是它的工作原理

let user = {
  name: "John"
};

function wrap(target) {
  return new Proxy(target, {
      /* your code */
  });
}

user = wrap(user);

alert(user.name); // John
alert(user.age); // ReferenceError: Property doesn't exist: "age"
let user = {
  name: "John"
};

function wrap(target) {
  return new Proxy(target, {
    get(target, prop, receiver) {
      if (prop in target) {
        return Reflect.get(target, prop, receiver);
      } else {
        throw new ReferenceError(`Property doesn't exist: "${prop}"`)
      }
    }
  });
}

user = wrap(user);

alert(user.name); // John
alert(user.age); // ReferenceError: Property doesn't exist: "age"