proxy 的 handler.get 方法用于拦截对象属性读取操作,接收 target、prop、receiver 四个参数,必须返回属性访问结果;例如拦截 user.name 返回 “[hidden]”。

JavaScript 中 Proxy 通过 handler.get 捕获 get 操作,即访问对象属性(如 obj.prop、obj['key'])时触发。
get 方法的基本结构
get 是 Proxy 第二个参数(handler 对象)中的一个可选方法,接收四个参数:
- target:被代理的原始对象
- prop:访问的属性名(字符串或 Symbol)
-
receiver:代理对象本身(通常是 proxy 实例,用于正确处理
this和原型链)
它必须返回一个值,该值将成为属性访问的结果。
基础用法示例
以下代码拦截对 user.name 的读取,并返回自定义值:
const proxy = new Proxy(user, {
get(target, prop) {
if (prop === 'name') return '[Hidden]';
return target[prop]; // 兜底返回原值
}
console.log(proxy.name); // '[Hidden]'
console.log(proxy.age); // 30
注意 receiver 的作用
当目标对象有 getter、或属性在原型上时,receiver 决定 this 的指向。若忽略它直接返回 target[prop],可能破坏 getter 的上下文:
- 错误写法:
return target[prop]—— getter 中的this指向target,而非proxy - 推荐写法:
return Reflect.get(target, prop, receiver)—— 保持语义一致,支持原型链和 getter
常见使用场景
- 属性访问日志:记录每次读取的属性名和时间
-
默认值兜底:对不存在的属性返回默认值(如
0或空数组) -
权限控制:根据用户角色屏蔽敏感字段(如
password) -
响应式系统:Vue 3 的 reactive 就依赖
get收集依赖
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











