Reflect调用的是js底层方法,底层方法会提供更多功能。比如示例中的Reflect.get
示例:
const obj = {
a:1,
b:2,
get c(){
return this.a + this.b
}
}
const proxy = new Proxy(obj,{
get(target,key){
console.log('正在读取proxy的属性:',key); // 正在读取proxy的属性: c
console.log(target === obj); // true
return target[key]
}
})
// 读取proxy的c
proxy.c;
const proxyUseReflect = new Proxy(obj,{
get(target,key){
/**
* 由于c内读取了a和b 所以会打印3次
* 正在读取proxyUseReflect的属性: c
* 正在读取proxyUseReflect的属性: a
* 正在读取proxyUseReflect的属性: b
*/
console.log('正在读取proxyUseReflect的属性:',key);
console.log(target === proxyUseReflect); //false
/**
* Reflect.get第三个参数为改变this指向
* c内的this就会指向proxyUseReflect,所以就会读取到proxyUseReflect的a和b
*/
return Reflect.get(target,key,proxyUseReflect)
}
})
// 读取proxyUseReflect的c
proxyUseReflect.c;