JavaScript Proxy(代理物件)教學

Proxy 是 ES6 引入的功能,允許你攔截對物件的存取行為,例如讀取屬性、設定值、刪除屬性等。


🔹 1. 基本語法

const target = {
  name: "Alice",
};

const handler = {
  get: (obj, prop) => {
    console.log(`取得屬性 ${prop}`);
    return obj[prop];
  },
  set: (obj, prop, value) => {
    console.log(`設定 ${prop}${value}`);
    obj[prop] = value;
    return true;
  }
};

const proxy = new Proxy(target, handler);

console.log(proxy.name); // 觸發 get
proxy.age = 30;          // 觸發 set

🔹 2. 支援的陷阱(traps)方法

方法名稱
說明

get

讀取屬性時觸發

set

設定屬性時觸發

has

使用 in 運算子時觸發

deleteProperty

使用 delete 時觸發

ownKeys

使用 Object.keys()for...in 觸發

getOwnPropertyDescriptor

使用 Object.getOwnPropertyDescriptor() 時觸發

...

其他如 defineProperty, preventExtensions


🔹 3. 實用案例

a. 驗證輸入資料

b. 提供預設值


🔹 4. 搭配 Reflect 使用


Proxy 是元程式設計(Meta-programming)的核心工具之一,能動態攔截並定義物件的基本操作,非常適合用於資料驗證、快取、偽裝物件等進階應用。

Last updated