构造一个 Proxy:
const proxy = new Proxy(target, handler)
举例:
const proxy = new Proxy({}, {
get() {
return 35
}
})
proxy.time // 35
proxy.name // 35
Proxy 支持的拦截操作:
get(target, propKey, receiver) 属性的读取
set(target, propKey, value, receiver) 属性的设置
has(target, propKey) 拦截 propKey in proxy 的操作
deleteProperty(target, propKey) 拦截 delete proxy[propKey] 的操作
ownKeys(target)
getOwnPropertyDescriptor(target, propKey)
defineProperty(target, propKey, propDesc)
preventExtensions(target)
getPrototypeOf(target)
isExtensible(target)
setPrototypeOf(target, proto)
apply(target, object, args)
construct(target, args)
实例方法盘点
get :
可以 get 拦截,实现读取数组负数的索引
set :
可以通过 set 限制对属性的修改,比如限制属性值不大于100,限制属性值类型等(可用于数据验证)
对 set 行为的监控,可用于数据绑定,实现实时更新视图
可以设置内部属性,结合 get 和 set 方法,防止内部属性被外部读写
apply :
拦截 proxy() , proxy.call() , proxy.apply()
不作任何拦截的情况下,也不能保证和目标对象的行为保持一致,因为 this 的指向是不同的