• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

TypeScript 素描 - 装饰器

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

 

/*
装饰器 简单理解为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) {

}

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
typescript 如何使用js 库发布时间:2022-07-18
下一篇:
typescript 实现函数重载发布时间:2022-07-18
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap