
用了匿名就不能取消这个计时器,不用匿名又不能传递参数,我人都原地爆炸了。求大佬指点
this.creatSkill10001.bind(this,参数)
1赞
思路先理一下,楼主的问题应该不是 “匿名函数” 问题,
而是 “作用域” 或者 “上下文”,本质问题是想要拿到 “newSkill” 这个变量,所以只能用 “匿名函数”
并且也不是对 “匿名函数传参” 而是"匿名函数"可以读取到 "creatSkill"的"newSkill"参数
我有以下建议:
1.从安全的角度考虑,首先"计时器不要用匿名函数注册" (保证注销)
2.脚本中挂一个变量xxx来接收 newSkill 参数,在计时器回调函数就可以使用变量 this.xxx
1赞
完全搞不懂问题在哪,建议退坑
结合1、2楼
// ...
private skillSchedule:Function | null = null;
createSkill(newSkill:skill){
// ...
this.skillSchedule = this.createSkill10001.bind(this, newSkill);
this.schedule(this.skillSchedule, newSkill.cd);
// ...
if (this.skillSchedule) {
this.unschedule(this.skillSchedule);
}
// ...
}
完工
3赞
是啥意思?
大佬牛逼!就是我想要的,实测可行,计时器可开可关可传参,完全没问题。
太对了!是这个意思,现在就是根据你说的第2点解决了这个问题。但是总感觉本来不应该这样,这个操作似乎有点反人类
还可以这样写,get新技能
let skillSchedule:Function | null = null; 这是啥意?
跟 let skillSchedule:Function = null; 有区别吗
没有区别,如果没有开启ts的严格模式两者都不会报错,个人习惯,null都要指出,除非保证不为null,那定义为
private a: Function = null!;
// ...
// 构造函数或生命周期函数中定义
a = xxx
// ...