[英]Check if a Typescript class has already been instantiated
我幾乎是 Typescript(以及 OOP)的新手,我有一個如下所示的模塊:
module SIMULATOR {
export class myClass extends myBaseClass{
constructor(){
//Make a div and append it to body
}
}
}
比我有一個元素 onClick function 調用 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 實例。
如果問題看起來很愚蠢,我深表歉意:我是初學者:)
由於您使用的是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-
attribute。 如果實例位於數據結構中,那么您就很好了。 如果不是,則創建它並將其添加到數據結構中。
要從數據結構中刪除實例,請使用$(button).data('myClass', null);
。
那不會處理該對象,但是會刪除它的引用,以便JavaScript引擎將其作為垃圾收集。
這是我偶然遇到的有趣的事情。
下面是來自我的瀏覽器控制台的 output
> class Home {}
< undefined
> typeof Home
< "function"
> typeof (new Home)
< "object"
基於此,您可以通過檢查其類型來檢查class是否已被初始化。 例如:
class Home {};
let val = new Home();
if (typeof val === "object") {
// class initialised
}
它將與在常規javascript中檢查它相同。 您將需要查看該對象是否為null
或undefined
Typescript非常適合幫助您進行開發,但是所有內容都可以在運行時編譯為純JavaScript。
使用本地范圍的變量作為myDiv永遠不會被初始化。 我建議將其移到內聯函數之外。 John是正確的,您所需要做的就是檢查null或undefined,因此您可以將變量名稱放入if階段中,為null和undefined等於false。
var myDiv;
$(button).on('click', ()=> {
if(!myDiv){
myDiv = new SIMULATOR.myClass();
}
else{
//do other stuff (eg: delete myClass instance)
}
});
希望這可以幫助
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.