016-Decorator(修饰器,是一个函数,用来修改类的行为)

/**
 * Decorator(修饰器,是一个函数,用来修改类的行为)
 * 扩展类的功能
 *
 * 第三方库修饰器的js库:core-decorators; npm install core-decorators
 *
 */

{ //基本用法 1
    /**
     *
     * @param target  修改的类的本身
     * @param name  修改类属性的名称
     * @param descriptor  该属性的描述对象
     * @returns {*}
     */
  let readonly=function(target,name,descriptor){
    descriptor.writable=false;  //限制不可写
    return descriptor
  };

  class Test{
    @readonly //调用修饰器
    time(){
      return '2017-03-11'
    }
  }

  let test=new Test();

  // 修改time()函数会报错
  // test.time=function(){
  //   console.log('reset time');
  // };

  console.log(test.time());
}


{ //基本用法 2
  let typename=function(target,name,descriptor){
    target.myname='hello';
  }

  @typename
  class Test{

  }

  console.log('类修饰符',Test.myname); //hello
  // 第三方库修饰器的js库:core-decorators; npm install core-decorators
}


/**
 * 前端日志系统 ********************************************
 */
{
  let log=(type)=>{
    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();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值