簡體   English   中英

檢查一個Typescript class是否已經被實例化

[英]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

下面是來自我的瀏覽器控制台的 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中檢查它相同。 您將需要查看該對象是否為nullundefined

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM