ES6总结 17- Decorator

2019-05-07  本文已影响0人  辣瓜瓜

ES6学习总结是自己在学习过程中的总结,记笔记就是为了督促自己学习和复习,好记性不如烂笔头。如果有错误,感谢指出。

Decorator

修饰器是一个函数,用来修改类的行为

1、函数

2、修改行为,扩展类的功能

3、对类进行操作,仅在类中可用

需要额外安装插件,打补丁修饰器语法

npm installbabel-plugin-transform-decorators-legacy--save-dev

.bebelrc
{
    "presents":["es2015"],
    "plugins":["transform-decorators-lengcy"]
}

修饰器限制功能只读

{
  let readonly=function(target,name,descriptor){
    descriptor.writable=false;
    return descriptor
  };

  class Test{
    @readonly
    time(){
      return '2017-03-11'
    }
  }

  let test=new Test();

  // test.time=function(){
  //   console.log('reset time');
  // }; 报错,不允许修改

  console.log(test.time());//2017-03-11
}

也可以在类的前面进行修饰

{
  let typename=function(target,name,descriptor){
    target.myname='hello';//增加一个静态属性myname
  }

  @typename//表示对类的修饰
  class Test{

  }

  console.log('类修饰符',Test.myname);//hello
}

第三方库修饰器的js库:core-decorators; npm install core-decorators

应用:日志系统

传统中,埋点会写在业务系统中,使用修饰器实现其他写法;

优点:把埋点系统抽离出来,代码复用,脱离了业务系统。

{
  let log=(type)=>{ //click?show?
    return function(target,name,descriptor){
      let src_method=descriptor.value; //保存原始函数体
      descriptor.value=(...arg)=>{
        src_method.apply(target,arg);//原方法先执行
        console.info(`log ${type}`); //模拟埋点操作
      }
    }
  }

  class AD{
    @log('show')
    show(){
      console.info('ad is show')
    }
    @log('click')
    click(){
      console.info('ad is click');
    }
  }

  let ad=new AD();
  ad.show();
  ad.click();
  //ad is show
  //log show
  //ad is click
  //log click
}




















上一篇下一篇

猜你喜欢

热点阅读