Skip to content

Commit 46a5827

Browse files
committed
feat: update articles
1 parent 6a40e19 commit 46a5827

1 file changed

Lines changed: 21 additions & 1 deletion

File tree

‎JavaScript/TypeScript/类型使用/Decorator.md‎

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,24 @@ p.test('Hello Jony');
160160

161161
所谓注解的定义就是:为相应的类附加元数据支持。所谓元数据可以简单的解释,就是修饰数据的数据,比如一个人有 name,age 等数据属性,那么 name 和 age 这些字段就是为了修饰数据的数据,可以简单的称为元数据。通过注解添加元数据,然后在装饰器中获取这些元数据,完成对类、类的方法等等的修改,可以在装饰器中添加元数据的支持,比如可以可以在装饰器工厂函数以及装饰器函数中添加元数据支持等。
162162

163+
Reflect Metadata 是 ES7 的一个提案,它主要用来在声明的时候添加和读取元数据。Reflect Metadata 的 API 可以用于类或者类的属性上,如:
164+
165+
```ts
166+
function metadata(
167+
metadataKey: any,
168+
metadataValue: any
169+
): {
170+
(target: Function): void;
171+
(target: Object, propertyKey: string | symbol): void;
172+
};
173+
```
174+
175+
## 注解使用
176+
177+
## 自定义 metadataKey
178+
179+
## 案例:Format
180+
163181
可以通过 reflect-metadata 包来实现对于元数据的操作。首先我们来看 reflect-metadata 的使用,首先定义使用元数据的函数:
164182

165183
```ts
@@ -174,7 +192,7 @@ function getFormat(target: any, propertyKey: string) {
174192
}
175193
```
176194

177-
这里的 format 可以作为装饰器函数的工厂函数,因为 format 函数返回的是一个装饰器函数,上述的方法定义了元数据 Sysmbol("format"),用 Sysmbol 的原因是为了防止元数据中的字段重复,而 format 定义了取元数据中相应字段的功能。接着我们来在类中使用相应的元数据:
195+
这里的 format 可以作为装饰器函数的工厂函数,因为 format 函数返回的是一个装饰器函数,上述的方法定义了元数据 `Sysmbol("format")`,用 Sysmbol 的原因是为了防止元数据中的字段重复,而 format 定义了取元数据中相应字段的功能。接着我们来在类中使用相应的元数据:
178196

179197
```ts
180198
class Greeter {
@@ -195,3 +213,5 @@ console.log(g.sayHello());
195213
```
196214

197215
在上述中,我们在 name 属性的装饰器工厂函数,执行`@Format("Hello, %s")`,返回一个装饰器函数,且该装饰器函数修饰了 Greeter 类的 name 属性,将“name”属性的值写入为"Hello, %s"。然后再 sayHello 方法中,通过 getFormat(this,"name") 取到 formatString 为“Hello,%s”.
216+
217+
## 案例:Angular 2 DI

0 commit comments

Comments
 (0)