ES6代理

1、proxy的实现

    let my = {
        location : "市区",
        housePrice : 20000
    }

//在我们获取数据前进行处理;//参数 第一要代理的对象 第二 处理函数
    let intermediaryAgent = new Proxy(my,{

        //get函数
        get(target,property){
            console.log(target);
            console.log(property);
            if(property == 'housePrice'){
                return target[property]*1.2;
            }else if (property == "location"){
                return "位于市中心";
            }
            return target[property];
        }
    })

    console.log(intermediaryAgent.location);

 

2、set方法   

参数 target当前对象 property 设置的那个属性 value 代表给属性赋的值是
作用,给属性值处理后设置值
    let account = {
        balance: 8000,
        money: 100
    }

    //第一我们要代理谁 //set 设置数据进行处理
    let bank = new Proxy(account, {
        get(target, property) {
            return target[property];
        },
        //参数 target当前对象 property 设置的那个属性 value 代表给属性赋的值是
        set(target, property, value) {
            console.log(value);
            if (property === 'bankMoney') {
                if (target.balance > value) {//判断自己的钱是否大于 传入的 是取钱 否余额不足
                    target.balance = target.balance - value
                    console.log(target.balance);
                } else {
                    console.log("余额不足")
                }
            }
        },
        
        ownKeys: function (target) { 
            return balance;//截获 只给该代理一个参数,其他属性获取不到
        },
        has:function(target,property){//has()方法用于是判断是否含有指定的键值对,有,就返回true。否则返回false。
            if(target[property]===undefined){
                return false;
            }else {
                return true;
            }
        }
    })
    bank.bankMoney = 7000;
    console.log(bank.balance)

  

3、ownKeys:截获 只给该代理相应属性,其他属性获取不到

        ownKeys: function (target) { 
            return balance;//截获 只给该代理一个参数,其他属性获取不到
        },

  

4、has()方法用于是判断是否含有指定的键值对,有,就返回true。否则返回false。

        has:function(target,property){//has()方法用于是判断是否含有指定的键值对,有,就返回true。否则返回false。
            if(target[property]===undefined){
                return false;
            }else {
                return true;
            }

  

5、apply方法 ,函数可以被代理。使用apply调用。

    let fn = function(){
        console.log("我的隔壁呢?")
    }

    let fn1 = new Proxy(fn,{
        apply: function(){
            console.log("唉")
        }
    })

    fn1();//唉

  

6、proxy.revocable方法

(可废止的,可撤回的;)函数来实现,它会返回一个对象,对象中含有一个proxy属性,它就是Proxy的代理实例对象;还有一个revoke属性,它是一个方法,用于取消代理

    let person = {"name":"张三"};
    //处理程序
    let handLe = {
        get : function(target,prop){
            return "李四";
        }
    };

    //使用Proxy.revocable()进行代理
    let obj = Proxy.revocable(person,handLe);

    console.log(obj.proxy.name);//李四

    //revoke 取消代理
    obj.revoke();
    console.log(obj.proxy.name);//报错代理被取消

  

 

 posted on 2020-09-02 20:39  wen22  阅读(181)  评论(0编辑  收藏  举报