Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/414.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在类函数中未定义this.interval_Javascript_Babylonjs - Fatal编程技术网

Javascript 在类函数中未定义this.interval

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

总之,我想在BJS中闪烁一个对象材质,因此我创建了两个函数
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);
}