es6新特性 proxy

ES6中新增了Proxy对象,从字面上看可以理解为代理器,主要用于改变对象的默认访问行为,实际表现是在访问对象之前增加一层拦截,任何对对象的访问行为都会通过这层拦截。在拦截中,我们可以增加自定义的行为。

Proxy实际是一个构造函数,接收两个参数,一个是目标对象target;另一个是配置对象handler,用来定义拦截的行为。

通过Proxy构造函数可以生成实例proxy,任何对proxy实例的属性的访问都会自动转发至target对象上,我们可以针对访问的行为配置自定义的handler对象,因此外界通过proxy访问target对象的属性时,都会执行handler对象自定义的拦截操作

控制台输出

 

 注意

1)必须通过代理实例访问

控制台输出没有拦截到数据

 

 

2)配置对象不能为空对象

 

这样相当于直接访问原对象

 1-----------------get(target, propKey, receiver)。
拦截对象属性的读取操作,

2-----------------set(target, propKey, value, receiver)

拦截对象属性的设置操作,

3----------------------has(target, propKey)。
拦截hasProperty的操作,返回一个布尔值,

4--------------------------deleteProperty(target, propKey)。
拦截delete proxy[propKey]的操作,返回一个布尔值,表示是否执行成功,

5----------------------------------ownKeys(target)。
拦截Object.getOwnPropertyNames(proxy)、Object.getOwnPropertySymbols(proxy)、Object.keys(proxy)、for...in循环等操作。

6------------------------getOwnPropertyDescriptor(targetpropKey)。
拦截Object.getOwnPropertyDescriptor(proxy, propKey)操作,返回属性的属性描述符构成的对象。

7-------------------------------defineProperty(target, propKey, propDesc)。
拦截Object.defineProperty(proxy, propKey, propDesc)、Object.defineProperties(proxy,propDescs)操作,返回一个布尔值。

8-----------------------------------------preventExtensions(target)。
拦截Object.preventExtensions(proxy)操作,返回一个布尔值。

9-------------------------------getPrototypeOf(target)。
拦截Object.getPrototypeOf(proxy)操作,返回一个对象。

10--------------------------------------isExtensible(target)。
拦截Object.isExtensible(proxy),返回一个布尔值,表示对象是否是可扩展的。

11-------------------------------setPrototypeOf(target, proto)。
拦截Object.setPrototypeOf(proxy, proto)操作,返回一个布尔值,表示的是拦截设置对象的原型属性的行为。

12-------------------------------apply(target, object, args)。
拦截Proxy实例作为函数调用的操作,例如proxy(...args)、proxy.call(object, ...args)、proxy.apply(...)。

13-----------------------------------construct(target, args)。
拦截Proxy实例作为构造函数调用的操作,例如new proxy(...args)。

!!!这些函数都有一个通用的特性,即如果在target中使用了this关键字,再通过Proxy处理后,this关键字指向的是Proxy的实例,而不是目标对象target

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值