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

      

  • 相关阅读:
    nodejs安装配置
    微信小程序访问豆瓣api报403错误解决方法
    WEB前端开发规范
    Java编程思想总结笔记Chapter 5
    Java编程思想总结笔记Chapter 3
    Java编程思想总结笔记Chapter 2
    详解Android Activity生命周期
    Java编程思想总结笔记The first chapter
    详解Android Activity启动模式
    Android与H5互调(通过实例来了解Hybrid App)
  • 原文地址:https://www.cnblogs.com/wenaq/p/13604047.html
Copyright © 2020-2023  润新知