Reflect.getMetadata和Reflect.getOwnMetadata之间的区别是什么?

时间:2018-01-29 20:22:06

标签: typescript reflect-metadata

正如标题中所述:reflect-metadata API提供了getMetadata方法和getOwnMetadata - 这里的区别是什么?同样适用于hasOwnMetadata等。

1 个答案:

答案 0 :(得分:2)

通常Own版本和常规版本之间的差异是查找是否继续原型链。在自己的版本中,只找到在目标对象上专门定义的元数据。在常规版本中,如果未在目标对象上定义元数据,则返回在对象原型上定义的元数据。

示例:

@Reflect.metadata("key", "base value")
class B {
    get prop(): number { return 0; }
}

class C extends B{ }

// "base value", metadata was not defined on C but was defined on it's prototype B
console.log(Reflect.getMetadata("key", C)); 

// undefined, metadata was not defined on C
console.log(Reflect.getOwnMetadata("key", C));