2016-06-20 133 views
0

我使用typescript裝飾這樣的:爲什麼javascript無法訪問屬性?

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我在target

這裏有__log_move_parametersplayground

+0

'__ugly__habits__from__other__languages__' – naomik

回答

0

在代碼運行之後,target纔會獲得屬性。你被欺騙了(因爲我們很多人已經這麼多次了),因爲當你將一個對象記錄到控制檯時,控制檯有一個活的對該對象的引用;當您單擊控制檯中對象旁邊的展開箭頭時,它將顯示對象的狀態,從您將其展開爲時開始,而不是在記錄日期時的狀態。

Here's an updated version與這兩個行補充說:

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

他們展示

 
target {} 
in? false