typescript - Vad är skillnaden mellan Reflect.getMetadata och Reflect.getOwnMetadata?


Som sagt i titeln: reflect-metadata-API:et tillhandahåller en getMetadata-metod och en getOwnMetadata - vad är skillnaden här? Samma gäller för hasOwnMetadata, osv.

Svar #1

Generellt är skillnaden mellan Own-versionerna och de vanliga huruvida uppslagningen fortsätter upp längs prototypkedjan. I de egna versionerna hittas endast metadata som är definierad specifikt på målobjektet. I de vanliga versionerna, om metadata inte är definierad på målobjektet, returneras metadata som är definierad på objektets prototyp.

Exempel :

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

Relaterade artiklar