function createDynamicProxy(target) {
return new Proxy(target, {
get(target, property) {
if (Reflect.has(target, property)) {
return Reflect.get(target, property);
} else {
return 'not found';
}
}
});
}
// 使用示例
const originalObject = { name: 'John' };
const proxyObject = createDynamicProxy(originalObject);
console.log(proxyObject.name); // 输出: John
console.log(proxyObject.age); // 输出: not found
实现原理解释
- Proxy 构造函数:
Proxy
用于创建一个代理对象,它接收两个参数,第一个是目标对象 target
,第二个是一个处理器对象,处理器对象包含了一系列的捕获器函数,这些函数定义了代理对象的行为。
- get 捕获器:在处理器对象中定义了
get
捕获器,当访问代理对象的属性时会触发这个捕获器。它接收三个参数:target
(目标对象)、property
(被访问的属性名)和 receiver
(代理对象本身,在这个例子中未使用)。
- Reflect.has:使用
Reflect.has
方法检查目标对象是否具有指定的属性。Reflect.has
方法与 in
操作符类似,但是以函数形式调用。
- Reflect.get:如果目标对象存在指定属性,通过
Reflect.get
方法获取目标对象上该属性的值。Reflect.get
方法用于获取对象上指定属性的值,类似于 obj[key]
或 obj.key
的操作,但以函数形式调用,更加灵活和安全。
- 默认返回值:如果目标对象不存在指定属性,则返回默认值
'not found'
。