为什么javascript无法访问属性?

时间:2016-06-20 06:00:57

标签: javascript typescript prototype

我正在使用这样的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

1 个答案:

答案 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