9.3 代理模式
代理可以用来实现一些有用的编程模式
9.3.1 跟踪属性访问
把实现相应捕获器的某个对象代理放到应用中,
可以监控这个对象何时在何处被访问过
1 | const user = { |
9.3.2 隐藏属性
代理内部实现对外部代码不可见,
可以借此隐藏目标对象上的属性
1 | const hiddenProperties = ['foo', 'bar']; |
9.3.3 属性验证
在赋值操作触发set捕获器时,
可以根据所赋的值决定是否允许赋值。
1 | const target = { |
9.3.4 函数与构造函数参数验证
可以对函数和构造函数的参数进行审查,
如让函数接收指定类型的值。
1 | function median(...nums) { |
又或者是在实例化时必须给构造函数传参
1 | class User { |
9.3.5 数据绑定与可观察对象
代理可以把运行时不相关的部分联系到一起,让不同的代码互操作。
可以将被代理的类绑定到一个全局实例集合中
1 | const userList = []; |
可以创建一个每次插入新实例都会发送消息的事件分派程序
1 | const userList = []; |