检查Typescript类是否已经实例化

时间:2014-11-06 17:16:42

标签: javascript jquery class typescript prototype

我对Typescript(以及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,我想知道如何" destroy" myClass实例也是。

如果问题看似愚蠢,我道歉:我是初学者:)

3 个答案:

答案 0 :(得分: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引擎将其收集为垃圾。

答案 1 :(得分:0)

这与在常规javascript中检查它相同。您需要查看该对象是null还是undefined

Typescript非常适合帮助您进行开发,但所有内容都可以在运行时编译为纯JavaScript。

答案 2 :(得分:0)

使用本地范围的变量作为myDiv,它永远不会被初始化。我建议将它移到你的内联函数之外。 John是正确的,您需要做的就是检查null或undefined,这样您就可以将变量名称放在if stagement中作为null,undefined等于false。

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

希望这有帮助