zoukankan      html  css  js  c++  java
  • es6 语法 (Proxy和Reflect 的对比)

    { 
    
      //原始对象
      let obj={
        time:'2017-03-11',
        name:'net',
        _r:123
      };
      //(代理商)第一个参数代理对象,第二个参数真正代理的东西
      let monitor=new Proxy(obj,{
        // 拦截对象属性的读取
        get(target,key){
          return target[key].replace('2017','2018')
        },
        // 拦截对象设置属性
        set(target,key,value){
          if(key==='name'){
            //赋值并返回
            return target[key]=value;
          }else{
            //不做操作直接返回
            return target[key];
          }
        },
        // 拦截key in object操作
        has(target,key){
          if(key==='name'){
            return target[key]
          }else{
            return false;
          }
        },
        // 拦截delete
        deleteProperty(target,key){
          if(key.indexOf('_')>-1){
            delete target[key];
            return true;
          }else{
            return target[key]
          }
        },
        // 拦截Object.keys,Object.getOwnPropertySymbols,Object.getOwnPropertyNames
        ownKeys(target){
          return Object.keys(target).filter(item=>item!='time')
        }
      });
    
      console.log('get',monitor.time); //2018-03-11
      //操作
      monitor.time='2018';
      monitor.name='mukewang';
      console.log('set',monitor.time,monitor);//2018-03-11;{time: "2017-03-11", name: "mukewang", _r: 123}
    
      console.log('has','name' in monitor,'time' in monitor);//true;false
    
      delete monitor.time;
      console.log('delete',monitor);//{time: "2017-03-11", name: "mukewang", _r: 123}
      //
      delete monitor._r;
      console.log('delete',monitor);//{time: "2017-03-11", name: "mukewang"}
    
      console.log('ownKeys',Object.keys(monitor));//["name", "_r"]
    
    }
    
    {
      let obj={
        time:'2017-03-11',
        name:'net',
        _r:123
      };
    
      console.log('Reflect get',Reflect.get(obj,'time'));//get 2017-03-11
      Reflect.set(obj,'name','mukewang');
      console.log(obj);//{time: "2017-03-11", name: "mukewang", _r: 123}
      console.log('has',Reflect.has(obj,'name'));//true
    }
  • 相关阅读:
    【扩展】1. PHP 大括号{} 的使用
    preg_replace 中修正符 e 的解析
    terminal 修改终端显示的名字
    find 命令详解
    OSI 7层结构 粗认识
    vi 全解析
    awk 学习笔记
    scp 复制远程文件 文件带空格 处理
    更新博客地址啦!!!
    ubuntu16.04安装NVIDIA驱动遇到的问题
  • 原文地址:https://www.cnblogs.com/Byme/p/7718522.html
Copyright © 2011-2022 走看看