• TypeScript 素描


    /*
    装饰器 简单理解为C#中的Attribute
    可以装饰到类、函数、讯问符、属性、参数上 语法 @xxx
    装饰器其实是一个函数 @xxx 就要有一个 function xxx
    多个装饰器可以用来装饰一个声明, @f @g arg
    或者在多行上
        @f
        @g
        x
    这样的组合最后的结果将会是 f(g(x))
    装饰器的执行顺序
    1、参数装饰器,然后依次是方法装饰器,访问器装饰器,或属性装饰器应用到每个实例成员。
    2、参数装饰器,然后依次是方法装饰器,访问器装饰器,或属性装饰器应用到每个静态成员。
    3、参数装饰器应用到构造函数。
    4、类装饰器应用到类。
    
    装饰器目前是实验性的功能,可能在以后的某个版本就会移除.默认也是不开启装饰器功能的
    我们手动的到tsconfig中配置experimentalDecorators为true
    */
    
    
    /**
     * 一个简单的方法装饰器 参数
            target 对于静态成员来说是类的构造函数,对于实例成员是类的原型对象
            propertyKey 成员的名字  这里是method
            descriptor 成员的属性描述符
     如果方法装饰器返回一个值 ,它会被用作方法的塑形描述符
     */
    function f() {  //当调用C类method方法时其执行顺序是
        console.log("f(): evaluated");   //-- 1
        return function (target, propertyKey: string, descriptor: PropertyDescriptor) {
            console.log("f(): called");   //--4
        }
    }
    
    function g() {
        console.log("g(): evaluated");  //--2
        return function (target, propertyKey: string, descriptor: PropertyDescriptor) {
            console.log("g(): called"); //--3
        }
    }
    
    class C {
        @f()
        @g()
        method() { }  // --5
    }
    
    
    /*
    类装饰器 参数
          constructor 构造函数
    类装饰器在类声明之前被声明,如果返回一个值(新的构造函数) ,它会使用提供的构造函数来
    替换类的声明
    */
    function classDecorator(constructor: Function) { }
    
    @classDecorator
    class B {
        constructor(message: string) {
    
        }
    }
    
    
    
    /*
    访问器装饰器
    用来装饰Get; Set 需要注意的是装饰第一个访问器就可以了,它默认装饰Get Set
         target 对于静态成员来说是类的构造函数,对于实例成员是类的原型对象
         propertyKey 成员的名字  这里是method
         descriptor 成员的属性描述符
    如果访问器装饰器返回一个值,它会被用作方法的属性描述符。
    */
    function Decorator(target: any, propertyKey: string, descriptor: PropertyDescriptor) {
    }
    class D {
        private _x: number;
    
        @Decorator
        get x() { return this._x };
    
        set x(value: number) { this._x = value };
    }
    
    
    /*
    属性装饰器 参数
        target 对于静态成员来说是类的构造函数,对于实例成员是类的原型对象。
        propertyKey 成员的名字。
    如果访问符装饰器返回一个值,它会被用作方法的属性描述符。
    */
    
    /*
    参数装饰器
        target 对于静态成员来说是类的构造函数,对于实例成员是类的原型对象。
        propertyKey 成员的名字。
        parameterIndex 参数在函数参数列表中的索引。
    
    参数装饰器只能用来监视一个方法的参数是否被传入,并不能拿到值,数装饰器的返回值会被忽略。
    */
    function argDecorator(target: Object, propertykey: string | symbol, parameterIndex: number) {
        
    }
    function fun( @argDecorator name: string) {
    
    }
  • 相关阅读:
    webpack 爬坑
    npm install 安装依赖一直失败(解决)
    vue中使用keepAlive组件缓存,如何清缓存(有些时候页面不需要缓存)
    JS 解决安卓手机输入框被软键盘遮住的问题
    vue项目keep-alive返回记住滚动条位置
    vue中监听路由参数变化
    win10 优化
    提升工作能力的表达能力
    TFS变更地址
    iis php web.config处理404,500等,跳转友好页面,显示500错误信息
  • 原文地址:https://www.cnblogs.com/LiangSW/p/6267141.html
Copyright © 2020-2023  润新知