• ts中的装饰器


    // 装饰器一种特殊的类的声明, 扩展类、属性、方法。
    function logClass(params:any) {
      console.log(params); // params代表HttpClict这个类
      params.propotype.apiurl = 'fadsf';
    }
    // 普通装饰器
    @logClass
    class HttpClict {
      constructor() {

      }
      getdata() {

      }
    }
    // 装饰器工厂
    //类装饰器
    function logClass1(params:any) {
      return function(target:any) {
        console.log(target) //当前类
        console.log(params) // 调用装饰器传入实参
      }
    }
    //属性装饰器
    function attr(params:any) {
      return function(target:any,attr:any){
        console.log(params) // 属性url传入的形参
        console.log(target) // 当前类
        console.log(attr) //当前属性名称
        target[attr] = params; // 修改构造函数里面的属性
      }
    }
    // 方法装饰器
    /**
    * 方法装饰器会在运行时传入三个参数
    * 1.对于静态成员来说是类的构造函数,对于实例成员是类的原型对象
    * 2.成员的名字
    * 3.成员属性的描述符
    */

    function logMethod(params:any) {
      return function(target:any,methodName:any,desc:any) {
        console.log(target)
        console.log(methodName)
        console.log(desc)
      }
    }
    //方法参数装饰器
    /**
    * 1.对于静态成员来说是类的构造函数,对于实例成员来说是类的原型对象
    * 2.参数 的名字
    * 3.参数在函数参数列表中的索引
    */
    function logParams(params:string) {
      return function(target:any,methodName:any,paramsIndes:any) {
        console.log(target)
        console.log(methodName)
        console.log(paramsIndes)
    }
    }
    @logClass1('fsdf')
    class HttpClict1 {
      @attr('12')
      url:string | undefined;
      constructor() {

      }
      @logMethod('123')
      getdata(@logParams('12') param:any) {

      }
    }

    // 装饰器执行顺序
    // 属性装饰器 -> 方法装饰器 -> 类装饰器
    // 相同装饰器从后向前执行。
  • 相关阅读:
    Thinkphp中如何书写按照指定字段同步更新的ORM
    一道money计算题引发的思考
    娱乐一下:汤姆君的大转盘算法(搞笑版)
    php导出数组到csv格式demo
    通过xshell/securecrt连接linux上传/下载文件
    windows设置代理.bat 脚本
    【面试题】输入并保存文件,完成后退出显示文件内容
    【设计模式学习笔记】 之 状态模式
    【学习笔记】FreeMarker 之于Servlet与Stuts2的应用
    【学习笔记】初识FreeMarker简单使用
  • 原文地址:https://www.cnblogs.com/windcat/p/11748381.html
Copyright © 2020-2023  润新知