ES6 - Proxy

2018-10-01  本文已影响0人  恒星的背影

构造一个 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 的指向是不同的

上一篇下一篇

猜你喜欢

热点阅读