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

    1、proxy的实现

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
        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 代表给属性赋的值是
    作用,给属性值处理后设置值
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    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:截获 只给该代理相应属性,其他属性获取不到

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

      

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

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

      

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

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    let fn = function(){
        console.log("被代理函数")
    }
     
    let fn1 = new Proxy(fn,{
        apply: function(){
            console.log("代理")
        }
    })
     
    fn1();//代理

      

    6、Proxy.revocable方法

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

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    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);//报错代理被取消

      

  • 相关阅读:
    Python操作Excel
    JMeter生成UUID方式
    JMeter之Beanshell用法
    JMeter后置处理器
    JMeter后置处理器
    Python之正则匹配 re库
    read(),readline() 和 readlines() 比较
    Python的位置参数、默认参数、关键字参数、可变参数之间的区别
    调查管理系统 -(6)自定义Struts2的拦截器&自定义UserAware接口&Action中模型赋值问题&Hibernate懒加载问题
    调查管理系统 -(5)Struts2配置&用户注册/登录/校验
  • 原文地址:https://www.cnblogs.com/wangxue13/p/13604554.html
Copyright © 2011-2022 走看看