JS Proxy 代理对象
学习使用Proxy拦截对象操作,实现数据验证、日志记录和响应式编程 · 难度:入门 · +15XP
Proxy 代理
Proxy 是 ES6 引入的特性,允许你创建一个对象的代理,从而可以拦截并自定义对象的基本操作(如属性读取、赋值、枚举、函数调用等)。
基本语法
const proxy = new Proxy(target, handler);target 是被代理的原始对象,handler 是一个包含陷阱(trap)方法的对象。
常用陷阱方法
| 陷阱 | 触发时机 |
|---|---|
get | 读取属性时 |
set | 设置属性时 |
has | in 运算符 |
deleteProperty | delete 操作 |
apply | 调用函数时 |
实际应用
- 数据验证:在 set 中检查年龄不能为负数
- 日志记录:记录所有属性访问和修改
- 默认值:返回默认值代替 undefined
- 响应式系统:Vue3 的响应式原理
注意事项
Proxy 是“透明”的,但 === 比较时 proxy !== target。另外,某些内置对象(如 Date)的代理行为可能不符合预期,需谨慎使用。
练习提示
请为下方 user 对象创建 Proxy,实现:1) 读取不存在的属性时返回 '未知';2) 设置 age 时验证必须是正数且小于150;3) 记录所有属性设置操作。