如何判断所处的类是否还存在

[复制链接]
785 |4
窜稀大仙 发表于 2023-5-20 23:37:37 | 显示全部楼层 |阅读模式
class MyClass {
  constructor() {
    setTimeout(() => {
      //如何判断MyClass有没有Destroy????
    }, 5000);
  }
类销毁后,异步语句依然会等待,如何判断呢?

回复

使用道具 举报

空伊伊 发表于 2023-5-22 09:46:01 | 显示全部楼层
把class当作是一个模具,模具是不占内存的,也就是不存在的。

所以要判断类是否存在,正确描述应该是如何判断这个类的实例是否存在。
我们在创建一个实例的时候,一般会使用这样的形式:
let myClass = new ClassName();
所以此时只需要if(myClass)就可以判断类是否存在了
回复

使用道具 举报

窜稀大仙楼主 发表于 2023-5-22 12:51:08 | 显示全部楼层
空伊伊 发表于 2023-5-22 09:46
把class当作是一个模具,模具是不占内存的,也就是不存在的。

所以要判断类是否存在,正确描述应该是如何 ...

所以这个方法要在别处设置个静态变量,记录这个示例的状态吧。如果能在类示例化的内部判断this的存在就方便多了。不知道有没有这种方法。现在我试了,destroy后,this还是会输出object。
回复

使用道具 举报

空伊伊 发表于 2023-5-22 13:12:35 | 显示全部楼层
销毁一个class的实例,是要让这个实例等于null才行。
你的class之所以能调用destory,是因为继承了Core.Script,这个destory是Core.Script提供的方法。
Core.Script提供的destory,并不是销毁实例,它的作用主要是让脚本里的onDestory被调用一次,另外停止它的onUpdate。
回复

使用道具 举报

窜稀大仙楼主 发表于 2023-5-22 14:02:22 | 显示全部楼层
本帖最后由 窜稀大仙 于 2023-5-22 15:55 编辑

我是这样写的,
class MyClass extends Core.Script{
  constructor() {
    super()
    setTimeout(() => {
      console.log(this)
    }, 5000);
  }
另一处脚本:
let testclass = new myClass()
setTimeout(() => {
      testclass.destroy()
      testclass = null
}, 2000);

输出是:object object

不知道可不可以创建个private isDestroyed: boolen = false
在onDestroy里this.isDestroyed = true
然后过程中判断这个值?
只是不知道执行示例销毁后,访问示例里的变量会不会有什么风险。
回复

使用道具 举报

72小时热榜
热门版块
快速回复 返回顶部 返回列表