返回課程

讀取不存在的屬性時發生錯誤

通常,嘗試讀取不存在的屬性會傳回 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"