ES中的装饰器至今还没有定案,TS中的也是实验中的功能,需要在配置文件中开启
装饰器是一种特殊的声明,能附加到类的声明、成员、方法参数上,修改它们的行为及扩展功能
声明装饰器
function decorator (target:any) {}
@decorator
- 通过
@decorator
声明装饰器,装饰器就是一个函数@
后面可以是函数名;也可以是一个表达式,但最终结果必须是一个函数
- 使用的函数会在运行时被调用,被装饰的声明信息会作为参数传入
- 声明时要紧挨着装饰的目标
装饰器工厂
用于为装饰器添加动态行为,提高代码复用性
function decorator ( params:number ) {
return function ( target: any ) {}
}
@decorator('123')
- 装饰器工厂也是一个函数,但是它需要再返回一个函数
- 使用方式:需要在
@
后面调用,返回的函数就会作为装饰器使用
装饰器组合
一个目标可以同时声明多个装饰器
@decorator1
@decorator2(123)
target
装饰器分类
- 类装饰器
- 属性装饰器
- 方法装饰器
- 参数装饰器
- 访问修饰符装饰器
装饰器执行顺序
- 先从前往后调用装饰器工厂,得到函数声明装饰器
- 再从后往前调用装饰器
- 属性装饰器 / 访问修饰符装饰器 > 方法装饰器 > 参数装饰器 > 类装饰器
不同声明上的装饰器调用顺序不同
- 实例成员/实例成员
- 参数装饰器 > 方法装饰器 > 访问修饰符装饰器 > 属性装饰器
- 构造函数
- 参数装饰器