面试题答案
一键面试const target = {
name: 'example'
};
const handler = {
get(target, property) {
console.log(`拦截读取属性 ${String(property)}`);
return Reflect.get(target, property);
}
};
const proxy = new Proxy(target, handler);
console.log(proxy.name);
Proxy 的作用
Proxy 用于创建一个对象的代理,从而实现基本操作的拦截和自定义(如属性查找、赋值、枚举、函数调用等)。通过创建 Proxy 实例,可以在不直接修改对象的情况下,对对象的各种操作进行控制,增加了代码的灵活性和可扩展性。例如可以实现数据验证、访问控制、日志记录等功能。
Reflect 的作用
Reflect 是一个内置的对象,它提供了一系列静态方法,这些方法与对象的各种元操作相对应,例如 Reflect.get
用于获取对象属性值、Reflect.set
用于设置对象属性值等。它的主要作用是将原本属于语言内部的操作以函数的形式暴露出来,使得可以像调用普通函数一样调用这些操作,同时它与 Proxy 配合使用,可以更方便地转发默认行为,保持代码简洁且语义清晰。