实现思路
- 创建一个函数,该函数接收一个目标对象作为参数,返回一个经过代理的对象。
- 在Proxy的
get
陷阱中,检查属性是否存在。如果不存在,且当前值是对象类型,就创建新的对象并设置到相应路径上。
- 使用
Reflect
来进行属性的获取和设置操作,以保持行为的一致性和兼容性。
关键代码示例
function deepAccess(target: any) {
return new Proxy(target, {
get(target, property) {
if (!Reflect.has(target, property)) {
Reflect.set(target, property, {});
}
const value = Reflect.get(target, property);
return typeof value === 'object' ? deepAccess(value) : value;
}
});
}
// 使用示例
let obj = {};
let result = deepAccess(obj);
console.log(result.a.b.c); // 自动创建a, b, c对象层级并返回 {}