Reflect.getMetadata 和 Reflect.getOwnMetadata 有什么区别?

What's the difference between Reflect.getMetadata and Reflect.getOwnMetadata?

正如标题所说:reflect-metadata API 提供了一个 getMetadata 方法和一个 getOwnMetadata - 这里有什么区别?同样适用于 hasOwnMetadata,等等

通常 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));