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

      }
    }

    // 装饰器执行顺序
    // 属性装饰器 -> 方法装饰器 -> 类装饰器
    // 相同装饰器从后向前执行。
  • 相关阅读:
    第六节:框架搭建之EF的Fluent Api模式的使用流程
    第五节:框架前期准备篇之锁机制处理并发
    第四节:框架前期准备篇之进程外Session的两种配置方式
    MySql安装成功后无法远程登录
    Java创建WebService
    C#模拟HTTP请求并发送二进制
    Java模拟POST请求发送二进制数据
    Java从内存流中读取byte数组
    C# 递归缩小图片
    Mongodb脚本记录
  • 原文地址:https://www.cnblogs.com/windcat/p/11748381.html
Copyright © 2011-2022 走看看