一、概述
Proxy
从字面意思可以理解为 “代理”,用于修改某些操作的默认行为,等同于在语言层面做出修改。通过代理可以在目标对象之前架设一层 “拦截” ,外界对该对象的访问都必须通过这层拦截,因此提供了一种机制,可以对外界的访问进行过滤和改写。
var obj = new Proxy({
}, {
get: function (target, propKey, receiver) {
console.log(`getting ${
propKey}!`);
return Reflect.get(target, propKey, receiver);
},
set: function (target, propKey, value, receiver) {
console.log(`setting ${
propKey}!`);
return Reflect.set(target, propKey, value, receiver);
}
});
上面的这段代码对空对象进行了一层拦截,重新定义了属性的读取和设置行为。
Proxy
是一个构造函数,用于实例化实例。
let proxy = new Proxy(target,handler);
其中,target
就是拦截的目标,handler
用于控制拦截行为。具体支持13种拦截行为:
get(target,prop,receiver)
—— 拦截对象属性的读取set(target, propKey, value, receiver)
—— 拦截对象的设置has(target, propKey)
—— 拦截propKey in proxy
的操作deleteProperty(target, propKey)
—— 拦截delete proxy[propKey]
的操作ownKeys(target)
—— 拦截Object