• 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) {

      }
    }

    // 装饰器执行顺序
    // 属性装饰器 -> 方法装饰器 -> 类装饰器
    // 相同装饰器从后向前执行。
  • 相关阅读:
    表达式计算 六月飞雪
    code::blocks 单步执行 六月飞雪
    5.1 字符串 六月飞雪
    对使用倒序的一维数组解决0/1背包问题的理解 六月飞雪
    5.2 高精度运算 六月飞雪
    关于ArcEngine“不能再打开其他表了”的错误 (20121026 15:43:33)
    关于AO插入对象
    多线程使用实例
    C#程序运行时间长出现无法响应状态
    Geographic coordinate system和projected coordinate
  • 原文地址:https://www.cnblogs.com/windcat/p/11748381.html
Copyright © 2020-2023  润新知