Javascript 在类函数中未定义this.interval
总之,我想在BJS中闪烁一个对象材质,因此我创建了两个函数Javascript 在类函数中未定义this.interval,javascript,babylonjs,Javascript,Babylonjs,总之,我想在BJS中闪烁一个对象材质,因此我创建了两个函数blink()和stopBlink(): 所以我在JQuery Ready函数中调用了我的函数: $(document).ready(function() { $("#btn1").click(function() { if(Toggle1) blink(stairMesh,100,boxMaterial[0]); else stopBlink(s
blink()
和stopBlink()
:
所以我在JQuery Ready函数中调用了我的函数:
$(document).ready(function() {
$("#btn1").click(function() {
if(Toggle1)
blink(stairMesh,100,boxMaterial[0]);
else
stopBlink(stairMesh,500);
Toggle1=!Toggle1;
}
);
直到现在一切都正常:),我决定创建一个类并在其中实现我的函数(因为我想使用多态性来重新定义blink()
和stopBlink()
函数)
我在ready函数中创建了一个新对象:
$(document).ready(function() {
var a = new B();
$("#btn1").click(function() {
if(Toggle1)
a.blink(stairMesh,100,boxMaterial[0]);
else
a.stopBlink(stairMesh,500);
Toggle1=!Toggle1;
}
);
问题是,当我单击按钮时,blink()
函数会正常工作,并且我的对象会闪烁,但当我再次单击以停止闪烁时,它会继续闪烁
我试图在
blink()
中console.log(this.interval)
,它给了我一个数字(11),但当我在stopBlink()
中控制台它时,它是未定义的 您的单击处理程序未绑定到类的上下文。一个简单的修复方法是将它们绑定到构造函数中。因此,您在blink
中设置了this.interval
,但它只存在于该函数的上下文中。通过将其绑定到类,此
将引用类的上下文,而不是函数上下文
constructor(oldMaterial)
{
super();
this.oldMaterial=oldMaterial;
this.interval=null;
this.blink = this.blink.bind(this);
this.stopBlink = this.stopBlink.bind(this);
}
感谢您的回复,现在可以从stopBlink()访问此.interval,但问题是setTimeout()无法正常工作,500毫秒后它不会停止Blink()
$(document).ready(function() {
var a = new B();
$("#btn1").click(function() {
if(Toggle1)
a.blink(stairMesh,100,boxMaterial[0]);
else
a.stopBlink(stairMesh,500);
Toggle1=!Toggle1;
}
);
constructor(oldMaterial)
{
super();
this.oldMaterial=oldMaterial;
this.interval=null;
this.blink = this.blink.bind(this);
this.stopBlink = this.stopBlink.bind(this);
}