我正在使用这样的typescript
装饰器:
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);
我发现target[metadataKey]
始终是undefined
,但当我退出target
时,我__log_move_parameters
中有target
以下是playground
答案 0 :(得分:0)
target
在该代码运行之后才能获取该属性。由于当您将对象记录到控制台时,控制台对该对象有一个实时引用,因此您被欺骗(因为我们很多人曾经这么多次)。当您单击控制台中对象旁边的展开箭头时,它会显示对象在展开时的状态,而不是记录时的状态。
Here's an updated version添加了这两行:
console.log("target", JSON.stringify(target));
console.log("in?", "__log_move_parameters" in target);
他们表示
target {} in? false