7.装饰器
## 装饰器的定义
装饰器:装饰器是一种特殊类型的声明,它能够被附加到类声明,方法,属性,参数上,可以修改的行为。
通俗的讲,装饰器就是一个方法,可以注入到类、方法、属性参数上来拓展类、属性、方法、参数的功能。
常见的装饰器有:类装饰器、属性装饰器、方法装饰器、参数装饰器。
装饰器的写法:普通装饰器(无法传参)、装饰器工厂(可传参)。
装饰器是过去几年中js最大的成就之一,已是Es7的标准之一。
## 类装饰器
- **类装饰器**:类装饰器在类声明之前被声明(紧靠着类声明)。类装饰器应用于类构造函数,可以用来监视,修改或替换类定义。传入一个参数。
类装饰器表达式会在运行时当作函数被调用,类的构造函数作为其唯一的参数。
如果类装饰器返回一个值,它会使用提供的构造函数来替换类的声明。
1. 普通装饰器(无法传参):
```
function sealed(target) {
// do something with "target" ...
}
@sealed
class Greeter {
greeting: string;
constructor(message: string) {
this.greeting = message;
}
greet() {
return "Hello, " + this.greeting;
}
}
```
2. 装饰器工厂(可传参):
```
function color(value: string) { // 这是一个装饰器工厂
return function (target) { // 这是装饰器
// do something with "target" and "value"...
}
}
@color("red")
class Greeter {
greeting: string;
constructor(message: string) {
this.greeting = message;
}
greet() {
return "Hello, " + this.greeting;
}
}
```
## 属性装饰器
- **属性装饰器**:属性装饰器表达式会在运行时当作函数被调用,传入下列2个参数:
1. 对于静态成员来说是类的构造函数,对于实例成员是类的原型对象。
2. 成员的名字