第九章 代理与反射

代理基础

代理是目标对象的抽象,目标对象可以通过代理来操作,并施加行为。

const target = {
  id: 'target'
}
const handler = {}
const proxy = new Proxy(target, handler)

捕获器

可以通过在handler定义一个get方法设置捕获器,捕获器接收目标对象,查询属性,还有代理属性三个参数。

const target = {
    foo: 'bar'
};
const handler = {
    get(trapTarget, property, receiver) {
        return trapTarget[property];
    }
};
const proxy = new Proxy(target, handler);
console.log(proxy.foo);   // bar
console.log(target.foo); // bar

撤销代理

代理模式

通过捕获get、set、has等操作,监控对象什么时候被修改访问。隐藏属性(get时返回undefined)属性验证(set时选择是否设置值)函数构造参数认证(apply和constructor时返回失败)