Proxy 對象用于定義基本操作的自定義行為如屬性查找,賦值,枚舉,函數(shù)調(diào)用等
1.基本語法:
let p = new Proxy(target, handler);
target是你要代理的對象.它可以是JavaScript中的任何合法對象.如: (數(shù)組, 對象, 函數(shù)等等)
handler是你要自定義操作方法的一個集合.
p是一個被代理后的新對象,它擁有target的一切屬性和方法.只不過其行為和結(jié)果是在handler中自定義的.
const target = {
? someProp: 1
}
const handler = {
? get: function(target, key) {
? ? return key in target ?
? ? ? target[key] :
? ? 'Doesn't exist!';
? }
}
const proxy = new Proxy(target, handler);
console.log(proxy.someProp) // 1
console.log(proxy.someOtherProp) // Doesn't exist!
2.Proxy的作用
1、 攔截和監(jiān)視外部對對象的訪問
2、 降低函數(shù)或類的復(fù)雜度
3、 在復(fù)雜操作前對操作進行校驗或?qū)λ栀Y源進行管理。
代理跟特性很相似,特性是對同一個對象的操作,數(shù)據(jù)不能在當前屬性下存儲,存儲在備份中,代理是對不同的對象的操作,數(shù)據(jù)可以直接存儲在當前屬性下,原對象屬性沒有發(fā)生改變