zoukankan      html  css  js  c++  java
  • ES6代理proxy

    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);//报错代理被取消
    

      

  • 相关阅读:
    mysql 历史版本下载
    mysql 5.7 版本 You must reset your password using ALTER USER statement before executing this statement报错处理
    5.7 zip 版本的安装 以及遇到的坑
    mysql 5.6zip版本的卸载与5.7 zip 版本的安装
    mysql数据库的备份与还原
    本地Navicat连接docker里的mysql
    docker修改数据库密码
    docker 在push镜像到本地registry出现的500 Internal Server Error
    linux 没有界面内容显示不全解决办法
    json与map互相转换
  • 原文地址:https://www.cnblogs.com/wenaq/p/13604047.html
Copyright © 2011-2022 走看看