Proxy(代理器)
1.概述
用于修改某些操作的默认行为(等同于在语言层面做出修改,所以属于一种“元编程”(meta programming),即对编程语言进行编程)
可以理解为:在目标对象之前设置一层‘拦截’,访问对象前都必须经过这一层,因此,这提供了一种机制,可以对外界的访问进行过滤、改写
例子如下:
Proxy实际重载了点运算符es6提供了Proxy构造函数,用来生成Proxy实例;例如:var proxy=new Proxy(target,handler);
参数target:所要拦截的目标对象;
参数handler:定制(描述)拦截行为的对象
Proxy实例作为其他对象的原型对象的例子Proxy支持的可以拦截的操作一共有13种,即对应下面的Proxy实例的方法。
注意点2.Proxy实例的方法
get(),set(),apply(),has(),construct(),deleteProperty(),defineProperty(),getOwnPropertyDescriptor(),getPrototypeOf(),isExtensible(),ownKeys(),preventExtensions(),setPrototypeOf()
3.Proxy.revocable()
返回一个可取消的Proxy实例
可取消的代理4.this问题
在Proxy代理的情况下,目标对象内部的this关键字会指向Proxy代理
5.实例:web服务的客户端
Proxy 对象可以拦截目标对象的任意属性,这使得它很合适用来写 Web 服务的客户端。
Proxy 可以拦截这个对象的任意属性,所以不用为每一种数据写一个适配方法,只要写一个 Proxy 拦截就可以了。
网友评论