2016-06-20 19 views
0

Ich verwende typescript Dekorateure wie folgt aus:Warum Javascript nicht auf Eigenschaft zugreifen kann?

function logParameter(target: any, key : string, index : number) { 
    var metadataKey = `__log_${key}_parameters`; 
    console.log(target); 
    console.log(metadataKey === "__log_move_parameters"); 
    console.log(target[metadataKey]); // always undefined 
} 


class Horse{ 
    public __log_move_parameters: number[]; 

    move(@logParameter distanceInMeters = 45) { 
     console.log("Galloping..."); 
    } 
} 
Horse.prototype.__log_move_parameters = []; 
let tom: Horse = new Horse(); 

tom.move(34); 

ich herausfinden, dass target[metadataKey] ist immer undefined, aber wenn ich target ausloggen ich __log_move_parameters haben in target

Hier ist die playground

+0

'__ugly__habits__from__other__languages__' – naomik

Antwort

0

target ruft die Eigenschaft erst ab, nachdem der Code ausgeführt wurde. Sie werden (wie so viele von uns schon so oft) durch die Tatsache betrogen, dass die Konsole einen Live--Verweis auf das Objekt enthält, wenn Sie ein Objekt an der Konsole anmelden. Wenn Sie auf den Erweiterungspfeil neben dem Objekt in der Konsole klicken, zeigt es Ihnen den Status des Objekts ab wann Sie es erweiterten, nicht wann es protokolliert wurde.

Here's an updated version mit diesen beiden Linien hinzugefügt:

console.log("target", JSON.stringify(target)); 
console.log("in?", "__log_move_parameters" in target); 

Sie zeigen

 
target {} 
in? false 
Verwandte Themen