3

Proxy(代理器/拦截器)Reflect反射

Reflect和Proxy一样 都是es6用来操作对象的 API

Proxy 代理操作

Proxy代理器
        var proxy = new Proxy({}, {
            get: function(target, property) {
            return 35;
            }
        });

        let obj = Object.create(proxy);
        obj.time // 35
        console.log(obj.time) 

Proxy()同样具有get、set方法

let obj={
            name:"小花",
            age:18,
            sex:"男"
        }

        var proxObj=new Proxy(obj,{
            set:function(target,key,value){
                if(value=="小花"){
                    target[key]=value;
                }
            },
            get:function(target,key){
                if(target[key]==undefined){
                    return "没有该属性"
                }else{
                    return target[key];
                }
            }  
        })
        proxObj.name="李小花";
        console.log(proxObj.name)

Reflect(反射)

//Reflect和Proxy一样 都是es6用来操作对象的 API
        let obj={
            name:"小花",
            age:18,
            sex:"女"
        }

        //Reflect.defineProperty(obj,"school",{value:"师徒教育"});
        Reflect.deleteProperty(obj,"age");
        console.log(Reflect.has(obj,"sex"));
        console.log(obj);
        var proxObj=new Proxy(obj,{
            set:function(target,key,value){
                if(value=="小花"){
                    Reflect.set(target,key,value);
                }
            },
            get:function(target,key){
                if(target[key]==undefined){
                    return "没有该属性"
                }else{
                    return  Reflect.get(target,key);
                }
            }  
        })
        proxObj.name="李小花";
        console.log(proxObj.name)

主要就是在执行函数之前Reflect代理一下完事在执行!


青石巷
259 声望10 粉丝

js/jq/node/es6/vue/react/Angular