代理与反射

43 阅读2分钟

Proxy   ( new Proxy(目标对象,处理程序对象) )

1、可以给目标对象定义一个关联的代理对象,在代理对象上执行的任何操作实际上都会应用到目标对象

2、在对目标对象的各种操作影响到目标对象之前,可以在代理对象中对这些操作加以控制

3、Proxy.prototype是undefined

4、代理对象与目标对象之间的联系会在代理对象的生命周期内一直持续存在。可通过Proxy.revocable()方法撤销之间的关联,一旦撤销便无法恢复。

5、代理可以拦截反射API的操作,代理另一个代理,给目标对象构建多层拦截网

捕获器

1、每个处理程序对象可以拥有多个捕获器

2、每个捕获器对应一种基本操作,代理可以在这些操作传播到目标对象之前先调用捕获器函数,从而拦截

3、只有在代理对象上执行这些操作时才会触发捕获器,在目标对象上执行不会触发

4、处理程序对象中所有捕获器函数都有对应的反射API方法,这些方法与捕获器拦截的方法具有一样的名称和函数名以及具有与被拦截方法相同的行为

5、只要在代理上调用,所有捕获器都会拦截它们对应的反射API操作

代理模式(应用场景)

1、跟踪属性访问,通过捕获get、set和has操作,可以知道对象属性何时被访问、查询

2、隐藏属性

3、属性验证,所有赋值都会触发set()捕获器,可以在里边判断决定是否允许赋值

4、函数与构造函数参数验证

5、数据绑定与可观察对象

捕获13种不同的基本操作.png