Proxy的使用方式
var proxy = new Proxy(target, handler);
其中target参数里面对应着你想要进行拦截操作的对象实例,handler是个配置对象。对象中配置你想要对target对象的什么操作进行拦截。。
拦截操作有13种
get(target, propkey, receiver)
用来拦截对象属性的读取,比如proxy.foo和proxy['foo']。
set(target, propkey, value, [receiver])
拦截对象属性的设置,比如proxy.foo = v 或者 proxy['foo'] = v, 返回布尔值。
has(target, propkey)
拦截propKey in proxy的操作,返回一个布尔值
deleteProperty(target, propKey)
拦截delete proxy[propKey]的操作,返回一个布尔值
ownKeys(target)
拦截Object.getOwnPropertyNames(proxy)、Object.getOwnPropertySymbol(proxy)、Object.keys(proxy)、
for...in循环,返回一个数组,该方法返回目标对象所有的自身属性的属性名,而Object.keys()返回结果仅包括
目标对象自身的可遍历属性。
getOwnPropertyDescriptor(target,propKey)
拦截Object.getOwnPropertyDescriptor(target,propKey), 返回属性的描述对象。
defineProperty(target, propKey, propDesc)
拦截Object.defineProperty(target, propKey, propDesc)、Object.defineProperties(proxy, propDescs),返回一个布尔值
preventExtensions(target)
拦截Object.preventExtensions(proxy),返回一个布尔值。
getPrototypeOf(target)
拦截Object.getPrototypeOf(proxy),返回一个对象。
isExtensible(target)
拦截Object.isExtensible(proxy),返回一个布尔值。
setPrototypeOf(target, proto)
拦截Object.setPrototypeOf(proxy, proto),返回一个布尔值。如果目标对象是函数,那么还有两种额外操作可以拦截。
apply(target, object, args)
拦截 Proxy 实例作为函数调用的操作,比如proxy(...args)、proxy.call(object, ...args)、proxy.apply(...)。
construct(target, args)
拦截 Proxy 实例作为构造函数调用的操作,比如new proxy(...args)。