es6 中的装饰器 decorator
再 es6 中新增了 3个器,分别是 迭代器、生成器、还有就是装饰器,关于迭代器和生成器可以参考这篇文章。
装饰器实际上是 es7 提出来的,它允许你在类、类方法、类属性等声明前面添加特殊的修饰符,以此来修改他们的行为。
- 装饰器是一个特殊的声明,语法是 @<函数名>,函数名的这个函数需要有具体实现
- 装饰器通常用来修改或扩展类,类方法,类属性
- 装饰器是一个函数
- 装饰者模式就是一种在不改变原类和使用继承的情况下,动态地扩展对象功能的设计理论。
- 只针对类
- 接收一些参数并返回一个函数,或执行一些操作
- 再运行时被调用,用来处理目标对象并返回一个新的对象,从而实现对目标对象的修改或增强
- 可以被用来
- 添加元数据
- 修改函数行为
- 实现面向切面编程
- 还只是一个草案 stage 2,所以在 mdn 官方文档搜不到
- 用法
- 类的装饰
- 在 class 上面加一行代码就行
- 接收一个参数,即类本身
- 如果要传递参数,可以在装饰器外层再封装一层函数
- 类属性/类方法装饰
- 能够接受三个参数
- 类的原型对象
- 需要装饰的属性名
- 装饰属性名的描述对象
- 能够接受三个参数
- 装饰器不能用于修饰函数,因为函数存在变量声明
- 类的装饰
ts 中的装饰器
es6 中的decorator 还只是草案,不能直接使用,但是可以使用 js 工具链(babel, TypeScript 等)实现装饰器。所以在 ts 中可以使用装饰器。
TypeScript 中的装饰器和 JavaScript 中的装饰器本质上是相同的,都是用来修改或者增强类、方法、属性或函数等的功能。它们的语法和基本概念是相似的。
ts 中的装饰器可以附加到
- 类声明
- 方法
- 配件
- 特性
- 参数
也是指针对类和类属性和类方法的