2012-11-29 64 views
4
class MockFamily implements IFamily { 
    static instances: MockFamily[] = []; 

    constructor (nodeClass: { new(): Node; }, engine: Engine) { 
     MockFamily.instances.push(this); 
    } 

    /* sniiiiiip */ 
} 

中訪問靜態成員在上面的例子有沒有辦法從構造函數內訪問靜態instances值,而不使用實際的類名?如何從一個構造

+1

只是好奇,你想解決什麼問題?如果沒有其他方法的資格證明,我也無法訪問它。 –

+0

我試圖用靜態實例解決的問題?這是一個用於集成測試的模擬對象,用於確保另一個類正確使用這些家族對象。其中一部分涉及需要輕鬆訪問創建的模擬對象的實例,以確保發生某些事情。在這個模擬中還有其他方法被剔除以簡單地跟蹤它們被調用的頻率,還有一些其他的東西可以讓我輕鬆地對它們進行測試。我可以用Sinon的間諜來解決同樣的問題,例如我沒有。 – jdsmith2816

回答

8

靜態變量總是通過類名訪問。類對象充當具有屬性的對象。最近你可能會來:

with (MockFamily) { 
    instances.push(this); 
} 

雖然我不會推薦它。

模塊是另一回事。在運行時,它們的內容是函數範圍內的變量,可以直接在幾乎任何地方訪問。

module MyModule { 
    var instances: IFamily[] = []; 

    export class MockFamily implements IFamily { 
     constructor (nodeClass: { new(): Node; }, engine: Engine) { 
      instances.push(this); 
     } 

     /* sniiiiiip */ 
    } 
} 
+1

啊,我喜歡這個解決方案;很簡單,爲什麼我沒有想到這一點? :P感謝您的幫助! – jdsmith2816