6
Reflect和Proxy之間有什麼不同?Proxy構造函數和Reflect有什麼區別?
從什麼記錄,似乎他們有幾乎相同的功能,除了:
- 反映能夠在指定時間只有一個陷阱。
- 代理revocable。
- 代理是一個構造函數。
如果上面的列表總結了所有的差異,那麼兩者的基本原理是什麼?
Reflect和Proxy之間有什麼不同?Proxy構造函數和Reflect有什麼區別?
從什麼記錄,似乎他們有幾乎相同的功能,除了:
如果上面的列表總結了所有的差異,那麼兩者的基本原理是什麼?
反映和代理有完全不同的目的和不同的能力。
MDN describes Proxy in that way:
的
Proxy
對象用於定義基本操作(例如屬性查找,分配,枚舉函數調用等)自定義行爲。
反映是一個內置的對象,它提供了可截取的JavaScript操作的方法。方法與proxy handlers相同。
我意識到你可能已經閱讀過,所以我將用一個例子來進一步解釋它。
假設你有一個對象:
const obj = {
a: 'foo',
b: 'bar',
};
可以使用屬性訪問器這樣的訪問屬性a
:
console.log(obj.a); // 'foo'
你可以做同樣的使用Reflect.get()
方法:
console.log(Reflect.get(obj, 'a')); // 'foo'
您也可以使用該對象創建該對象的代理代理構造函數。我們將使用get
處理程序截取所有屬性查找。
const proxy = new Proxy(obj, {
get(target, property) {
return property in target ? target[property] : 'default';
},
});
現在,使用任一屬性訪問器或Reflect.get()
得到字符串'default'
未定義的屬性結果:
console.log(proxy.c); // 'default'
console.log(Reflect.get(proxy, 'c')); // 'default'
代理與反思可以工作的偉大在一起。例如,您可以使用反射功能創建一個代理程序,其中包含空操作程序get
處理程序:
new Proxy(obj, {
get: Reflect.get,
});