我对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实例也是。
如果问题看似愚蠢,我道歉:我是初学者:)
答案 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)
}
});
希望这有帮助