前言
最近看依赖注入控制反转,javascript的实现借助了inversifyjs,而inversifyjs又用到了reflect-medadata,简单的研究了下reflect-metadata内部结构,想看看它是怎么存储元数据的。
正文
简单看一个api
1 | Reflect.defineMetadata(metadataKey, metadataValue, target, propertyKey); |
它内部定义了一个weakmap,用于和target关联,创建这个weakmap的主要流程
1 | Reflect.defineMetadata(metadataKey, metadataValue, target, propertyKey); |
分为三层map,每一个target通过weakmap映射到一个metadataMap,metadataMap内部存储了target对象上所有键的元数据(metadata),metadata也是一个map,里面映射metadataKey => metadataValue,大致如此。