zoukankan      html  css  js  c++  java
  • 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) {

      }
    }

    // 装饰器执行顺序
    // 属性装饰器 -> 方法装饰器 -> 类装饰器
    // 相同装饰器从后向前执行。
  • 相关阅读:
    移动语义
    unordered_map/unordered_set & unordered_multimap/unordered_multiset非关联容器
    C++构造函数和析构函数,以及构造函数特殊成员变量和函数的初始化
    Valgrind,内存调试工具
    堆排序,图解,C/C++实现
    哈希表概念和实现,C/C++实现
    AVL平衡二叉树实现,图解分析,C++描述,完整可执行代码
    二叉排序树,Binary_Sort_Tree,C++完整实现
    [Codeforces Round #656 (Div. 3)] (E. Directing Edges)拓扑排序
    最短路 2 [HDU
  • 原文地址:https://www.cnblogs.com/windcat/p/11748381.html
Copyright © 2011-2022 走看看