系列文章:
- 全新 Javascript 装饰器实战上篇:用 MobX 的方式打开 Vue
- 全新 JavaScript 装饰器实战下篇:实现依赖注入
上一篇文章我们介绍了 JavaScript 最新的装饰器提案,以及它和旧版的区别。这篇文章我们将继续深入装饰器,尝试实现一个简易的依赖注入库。
谈到装饰器我们总会听到 reflect-metadata
, 尤其是社区上的依赖注入库,比如 inversify.js
我们在上一篇文章的装饰器实现中,会直接去转换或者修改类的结构,大部分场景这并不是最佳实践。
大部分情况下我们应该利用装饰器来收集一些标注信息,比如 MobX 用装饰器来标注哪些是 observable、哪些是 computed;Inversify.js 用 inject 标注哪些属性需要进行注入;Angular.js 使用 Input/Output 标记属性….
如果我们要通过装饰器来标记类的原信息,那就得来认识一下:装饰器的好搭子 reflect-metadata
。
DI 库经常提及的 reflect-metadata 到底是什么?
这是一个 JavaScript 提案,但是作者并没有将其提交到 TC39。它的继任者现在是 Decorator Metadata,现在已经进入了 Stage 3 阶段,Typescript 也将在 5.2 中实现这个提案。
Decorator Metadata 会在下文详细介绍,我们先来看看 reflect-metadata。
先来看看使用它能用来干啥:
代码语言:javascript复制test('reflect-metadata', () => {
const key = 'myKey'
//