2014-11-06 76 views
0

我幾乎新打字稿(並且也OOP)和我有這樣一個模塊如下:檢查是否打字稿類已經被實例化

module SIMULATOR { 
    export class myClass extends myBaseClass{ 
     constructor(){ 
     //Make a div and append it to body 
     } 
    } 
} 

比我附有onClick功能的元素調用myClass的是這樣的:

$(button).on('click',()=> { 
    if(//class hasn't been instantiated yet){ 
     var myDiv = new SIMULATOR.myClass(); 
    } 
    else{ 
     //do other stuff (eg: delete myClass instance) 
    } 
}); 

我的第一個目標是要了解,我可以檢查是否myClass的已經被實例化。

後來我會用jquery銷燬創建的div,我想知道如何「銷燬」myClass實例。

我道歉,如果該問題可能有點傻:我是個初學者:)

+0

沒有辦法告訴一個類是否在沒有外部跟蹤機制的情況下被實例化。我建議將類的實例添加到與按鈕相關的數據中。例如,在'on':'$(button).data('myClass',myDiv)'內。你可以通過執行if($(button).. data('myClass')){// myClass已經實例化')來檢查它是否已經存在。這假定jQuery,你沒有添加爲標籤,所以我沒有添加這個答案。 – 2014-11-06 17:28:38

+0

好吧,你的意思是添加一個數據屬性的按鈕,所以如果數據屬性存在,該按鈕已被點擊。這是一個解決方法,我也可以添加一個類屬性,在構造函數中將其設置爲true,並在onCLick函數中檢查它。我正在尋找一個更整潔的解決方案。 PS:添加了Jquery標籤;) – Plastic 2014-11-06 17:38:43

回答

1

由於您使用jQuery的:),這裏是我會怎麼做:

$(button).on('click',()=> { 
    var myDiv: SIMULATOR.myClass = $(button).data('myClass'); 
    if(myDiv){ 
     //do other stuff (eg: delete myClass instance) 
    } 
    else { 
     // myDiv has not been instantiated 
     myDiv = new SIMULATOR.myClass(); 
     $(button).data('myClass', myDiv) 
    } 
}); 

這實際上存儲類的實例在jQuery的數據結構,在內存中,不是作爲data-屬性。如果實例處於數據結構中,那麼您很好。如果不是,則創建它並將其添加到數據結構中。

要從數據結構中刪除實例,請使用$(button).data('myClass', null);

不會處理該對象,但會刪除對象的引用,以便JavaScript引擎將其收集爲垃圾。

+0

這就像一個魅力!如果我想刪除該實例? $(按鈕)。數據( '');會刪除它嗎? – Plastic 2014-11-06 17:59:33

+0

'$(按鈕)。數據('myClass',null);'將刪除它。 – 2014-11-06 18:00:35

+0

謝謝,它幫助我很多。在我的項目和我的理解。 – Plastic 2014-11-06 18:21:47

0

這將是相同常規的JavaScript檢查它。您需要查看該對象是否爲nullundefined

Typescript非常適合幫助您進行開發,但所有內容都編譯爲純JavaScript運行時。

+0

你的意思是「whitof」typeof「? – Plastic 2014-11-06 17:31:46

+0

我的意思是你需要在某個時候創建​​它...'var myClass',然後在其他地方實例化它(或者之後,然後檢查它總會是真的......)。 'myClass = new Simulator.MyClass()',你可以用'if(myClass ==='undefined'|| myClass === null)在其他地方檢查它' – John 2014-11-06 17:35:49

0

使用本地作用域變量作爲myDiv它永遠不會被初始化。我建議將它移到內聯函數之外。約翰是正確的,你所需要做的就是檢查null或undefined,這樣你就可以將變量名稱放在if管理中作爲空值,未定義等同於false。

var myDiv; 
$(button).on('click',()=> { 
    if(!myDiv){ 
     myDiv = new SIMULATOR.myClass(); 
    } 
    else{ 
     //do other stuff (eg: delete myClass instance) 
    } 
}); 

希望這有助於