第九章:代理与反射
9.1 代理基础
9.1.1 创建空代理
const target = {
id: "target"
};
const handler = {};
const proxy = new Proxy(target, handler);
console.log(proxy.id);
proxy.id = "foo";
console.log(target.id);
console.log(proxy.id);
console.log(target === proxy);
9.1.2 定义捕获器
const target = {
id: "target"
};
const handler = {
get() {
return "handler override";
}
};
const proxy = new Proxy(target, handler);
console.log(proxy.id);
9.1.3 捕获器参数和反射 API
get(trapTarget, property, receiver)
- trapTarget:目标对象
- property:要查询的属性
- receiver:代理对象
Reflact
全局对象
const handler = {
get() {
return Reflact.get(...arguments);
}
};
9.1.4 捕获器不变式
9.1.5 可撤销代理
const { proxy, revoke } = Proxy.revocable(target, handler);
revoke();
9.1.6 实用反射 API
9.1.7 代理另一个代理
9.1.8 代理的问题与不足
1. 代理中的 this
2. 代理与内部槽位
9.2 代理捕获器与反射方法
9.3 代理模式
9.3.1 跟踪属性访问
9.3.2 隐藏属性
9.3.3 验证属性
9.3.4 函数与构造函数参数验证
9.3.5 数据绑定和可观察对象