proxy和reflect
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);