ES6 - Proxy

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,001评论 19 139
  • ES:给开发者提供了一个新特性:Proxy,就是代理的意思。也就是我们这一节要介绍的知识点。以前,ATM还没有那么...
    幸宇阅读 467评论 0 0
  • 按照老师的要求第一次开了家庭会议,真是开出了没有想到的问题: 1、在互相认可一周表现的环节,没想到又发现了孩子和老...
    小泥蛋儿阅读 3,503评论 0 1
  • 这几天,手机被榆林产妇跳楼的消息和评论刷屏了。想想真的很可怕因为,生孩子,对一个女人来说,无异走了一趟鬼门关。但对...
    八月桂花香满天阅读 188评论 1 2
  • 001 初恋情人 雨,无边无际,天地间一片灰蒙蒙的,慕容白感觉好像在河里游泳时突然腿抽筋,坠入了...
    不可芳物阅读 502评论 4 5