首页 > 代码库 > TypeScript 素描 - 装饰器
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) { }@classDecoratorclass 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) {}
TypeScript 素描 - 装饰器
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。