proxy
也是 ES6 新加入的標準,中文直譯「代理」。前面我們用到getter
和setter
,但它們只能控制單一屬性,而 proxy
比起它們更加強大,能全面的控制與目標物件的互動,甚至是呼叫物件方法。
const target = {
a: 1,
b: 2,
c: 3
};
const proxy = new Proxy(target, {
get: (target, name) => {
return name in target ? target[name] : 42;
}
});
console.log(proxy.a); // 1
console.log(proxy.b); // 2
console.log(proxy.c); // 3
console.log(proxy.something); // 42
呼叫 proxy 要使用new Proxy
製作出新的 proxy 物件,第一個參數是它要代理的對象,第二個參數是一個物件,裡面可以設定各種 proxy 的監聽器,並設定在發生時所要執行的方法。
在這裡我們有個基本物件target
,為它設了一個 proxy,它監聽的是取值的get
行為,當透過 proxy 取值時,proxy 會在 target 裡尋找 key 值名稱,如果有找到就回傳它的值,如果沒有找到,就回傳 42。