typescript - Hva er forskjellen mellom Reflect.getMetadata og Reflect.getOwnMetadata?


Som sagt i tittelen: reflect-metadata-APIet gir en getMetadata-metode og en getOwnMetadata - hva er forskjellen her? Det samme gjelder for hasOwnMetadata, osv.

Svar #1

Generelt er forskjellen mellom Own-versjonene og de vanlige versjonene om oppslaget fortsetter oppover prototypekjeden. I de egne versjonene blir kun metadata som er definert spesifikt på målobjektet funnet. I de vanlige versjonene, hvis metadata ikke var definert på målobjektet, returneres metadata som er definert på objektets prototype.

Eksempel :

@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)); 

Relaterte artikler