《JavaScript高级程序设计》学习笔记 代理与反射

发布于:2022-08-04 ⋅ 阅读:(314) ⋅ 点赞:(0)

一、代理

代理时对目标的抽象

1.创建代理

(1)代理是使用Proxy构造函数创建的,该函数接收两个参数,目标对象和处理程序对象.

2.定义捕获器

使用代理的目的是可以定义捕获器.捕获器就是在处理程序对象中定义的"基本操作的拦截器"

3.捕获器参数和API

(1)所有捕获器都可以访问相应的参数,基于这些参数可以重建被捕获方法的原始行为.
(2)处理程序对象中所有可以捕获的方法都有对应的反射(Reflect)API方法.

4.捕获器不变式

每个捕获的方法都知道目标对象上下文,捕获函数签名,而捕获处理程序的行为必须遵循"捕获器不变式"

5.可撤销代理

6.代理的问题与不足

(1)代理中的this
(2)代理与内部槽位

二、反射

1.实用反射操作

(1)反射API和对象API
反射API并不限于捕获处理程序
大多数反射API方法在Object类型上有对应的方法
(2)状态标记,很多反射方法返回称作"状态标记"的布尔值,表示意图执行的操作是否成功.
(3)用一等函数替代操作符
Reflect.get()可以替代对象属性操作符
Reflect.set()可以替代=赋值操作符
has()可以替代in操作符或with()
deleteProperty()可以替代delete操作符
construct()可以替代new操作符
(4)安全地应用函数
Reflect.apply(myFunc,thisVal,argumentList);

三、代理模式

1.跟踪属性访问

通过get,set,has等操作,可以知道对象属性什么时候被访问,被查询.把实现响应捕获器的某个对象放到应用中,可以监控这个对象何时在何处被访问过

2.隐藏属性

代理的内部实现对外部代码是不可见的

3.属性验证

所有赋值操作都会触发set()捕获器,所以可以根据所赋的值决定是允许还是拒绝赋值

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

对函数和构造函数的参数进行审查

5.数据绑定和可观察对象

通过代理可以把运行时中原本不相关的部分联系到一起.

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到