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. 成员的名字