proxy 可通过拦截 get/set 操作将别名映射到真实属性,如 fullname→name;需配合 has 和 ownkeys 拦截以支持 in 操作符和 object.keys(),确保别名被正确识别。

Proxy 可以通过拦截 get 和 set 操作,把访问或赋值某个属性名自动映射到另一个实际属性名上,实现“别名”效果。
定义别名映射表
先准备一个对象,声明哪些别名对应真实字段。比如把 fullName 映射到 name,userAge 映射到 age:
const aliasMap = { fullName: 'name', userAge: 'age' };
在 handler 中处理 get/set
在 Proxy 的 handler 里检查访问的 key 是否在别名表中,有则转向真实字段:
- get:若 key 是别名,返回对应真实属性值;否则走默认行为
- set:若 key 是别名,写入对应真实属性;否则走默认行为
- 注意要同时代理
has和ownKeys(可选),否则in操作符或Object.keys()不会识别别名
基础实现示例
下面是一个最小可用版本:
const data = { name: 'Alice', age: 30 };
const aliasMap = { fullName: 'name', userAge: 'age' };
const proxy = new Proxy(data, {
get(target, key) {
const realKey = aliasMap[key] ?? key;
return target[realKey];
},
set(target, key, value) {
const realKey = aliasMap[key] ?? key;
target[realKey] = value;
return true;
}
});
console.log(proxy.fullName); // 'Alice'
proxy.userAge = 31;
console.log(proxy.age); // 31
增强版:支持 has 和 ownKeys
让 'fullName' in proxy 返回 true,或 Object.keys(proxy) 包含别名:
-
has:检查 key 是否为别名,或目标自身拥有该 key -
ownKeys:返回真实键 + 所有别名键(去重) - 注意:修改
ownKeys后,配合getOwnPropertyDescriptor才能保证for...in或解构正常工作
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











