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