Proxy用于重寫對象上的預設的方法
文法
target:需要代理的對象
handler:一個對象,包含想要重寫的操作
所有的方法可以在MDN中查詢:MDN處理器對象
簡單例子
先定義一個對象:
再定義一個Proxy執行個體來代理這個對象:
const personProxy = new Proxy(person, {
get(target, key) {
//将目标對象的屬性名轉為大寫
return target[key].toUpperCase();
}
});
這時候在控制台讀取personProxy的name屬性:
Tom就變成大寫的了
其中 get() 方法的作用就是攔截對象的讀取屬性操作
target為目标對象,這裡 personProxy.name 的使用,target為personProxy
key為所擷取的屬性名,這裡 personProxy.name 的使用,key為personProxy的name屬性
具體的一些用法,解釋,可以檢視上面的MDN連結進行查閱
再舉一個🌰:
const person = { name: 'Tom', age: 20 };
const personProxy = new Proxy(person, {
set(target, key, value) {
if(typeof value === 'string') {
//去除指派屬性頭尾的空格
target[key] = value.tirm();
}
}
});
handler.set()
在給代理對象的某個屬性指派時觸發該操作,比如在執行 proxy.foo = 1 時。
在控制台對personProxy的name屬性指派一個帶空格的名字,之後再通路personProxy的name屬性,發現空格沒有了: