Proxy 对象 用于创建一个对象的代理,从而实现基本操作的拦截和自定义(如属性查找、赋值、枚举、函数调用等)。
基本使用
- 创建目标对象:这是你想要代理的对象。
- 定义处理器对象:包含捕获器函数,这些函数会拦截并自定义目标对象的操作。
- 创建 Proxy 对象:使用
new Proxy(target, handler)创建代理对象。
// 创建目标对象
const target = {
message1: "hello",
message2: "everyone"
};
// 定义处理器对象
const handler = {
get: function(target, prop, receiver) {
if (prop === 'message1') {
return 'world';
}
return Reflect.get(...arguments);
}
};
// 创建 Proxy 对象
const proxy = new Proxy(target, handler);
console.log(proxy.message1); // 输出: world
console.log(proxy.message2); // 输出: everyone
常用捕获器
get(target, prop, receiver): 拦截对象属性的读取操作。set(target, prop, value, receiver): 拦截对象属性的设置操作。has(target, prop): 拦截prop in target操作。deleteProperty(target, prop): 拦截delete target[prop]操作。apply(target, thisArg, argumentsList): 拦截函数调用操作。construct(target, args): 拦截new操作符。
Proxy 提供了强大的功能,可以用来实现各种高级操作,如数据绑定、验证、格式化等。
参考
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Proxy