代理是一种特殊的对象,它可以作为另一个对象(目标对象)的中介,对目标对象的操作可以通过代理来进行,同时可以自定义这些操作的行为。
空代理的概念
- 空代理:指代理对象除了作为目标对象的抽象表示外,不做任何额外的操作。也就是说,通过代理进行的所有操作都会直接传递给目标对象,就像没有代理存在一样。
创建代理
- 使用
Proxy
构造函数创建代理,它需要两个参数:- 目标对象:你想要代理的对象。
- 处理程序对象(handler):一个对象,包含一系列的方法,用于拦截并自定义目标对象上的操作。如果不需要自定义行为,可以传递一个空对象。
示例代码
const target = { id: 'target' };
const handler = {};
const proxy = new Proxy(target, handler);
这里创建了一个空代理proxy
,其目标对象是target
,而处理程序对象是一个空对象,意味着所有操作都将直接传递给目标对象。
通过代理操作目标对象:
console.log(target.id); // 输出 'target'
console.log(proxy.id); // 同样输出 'target'
这说明通过代理访问属性的行为与直接访问目标对象相同。
当修改目标对象或通过代理修改目标对象时,这种变化是双向可见的:
target.id = 'foo';
console.log(target.id); // 输出 'foo'
console.log(proxy.id); // 同样输出 'foo'
proxy.id = 'bar';
console.log(target.id); // 输出 'bar'
console.log(proxy.id); // 同样输出 'bar'
无论是通过目标对象还是代理进行修改,结果都是一致的,因为它们共享同一份数据。