proxy代理指定对象的常规操作
let person = {
name:'tom',
age:18
}
参数1:被代理对象
参数2:handle()
let personProxy = new Proxy(person,{
get:function(target,key){
console.log(`person的${key}属性被读取了`);
return target[key]
},
set:function(target,key,value){
console.log(`person的${key}属性被修改了`);
target[key] = value;
return true;
}
})
通过代理对象来操作被代理对象
personProxy.name//tom 调用了proxy中handler的get方法
personProxy.name = 'mickey'
reflect
Reflect.get(person,'name');//mickey
Reflect.set(person,'age',18);//修改成功age:18
proxy和reflect结合使用
let personProxy = new Proxy(person,{
get:function(target,key){
console.log(`person的${key}属性被读取了`);
// return target[key]
return Reflect.get(target,key)
},
set:function(target,key,value){
console.log(`person的${key}属性被修改了`);
/*target[key] = value;
return true;*/
return Reflect.set(target,key,value);
}
})
使用reflect获取symbol属性
let s1 = Symbol.for('score');
person[s1] = 88;
for(let key in person){
console.log(key);
}
console.log(person);
Reflect.ownKeys(person);