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);
原文地址:https://www.cnblogs.com/lisa2544/p/15654637.html