TypeScript/Javascript — ошибка типа this.функция не является функцией

#javascript #angular #typescript

Вопрос:

Я немного новичок в машинописи, но знаю JavaScript раньше. У меня есть код для мини-игры с колесом для моего приложения, и я получаю следующую ошибку на своей консоли.

this.easeOut is not a function

Код следующий (только то, что важно для проблемы, я думаю):

 spin() {
  const spinAngleStart = Math.random() * 10   10;
  this.spinTime = 0;
  this.spinTimeTotal = Math.random() * 3   4 * 1000;
  this.rotateWheel(spinAngleStart);
}

rotateWheel(spinAngleStart: number){
  this.spinTime  = 30;
  if(this.spinTime >=  this.spinTimeTotal) {
    this.stopRotateWheel();
    return;
  }
  *const spinAngle = spinAngleStart - this.easeOut(this.spinTime, 0, spinAngleStart, this.spinTimeTotal);*
  this.startAngle  = (spinAngle * Math.PI / 180);
  this.drawRouletteWheel();
  console.log(this.spinTimeTotal);
  console.log(this.spinTime);
  this.spinTimeout = setTimeout(this.rotateWheel, 30);
 } 

easeOut(t, b, c, d) {
   const ts = (t /= d) * t;
   const tc = ts * t;
   console.log(ts);
   console.log(tc);
   return (b c * (tc   -3*ts   3*t));
  }
 

Как вы можете видеть, easeOut() действительно существует в той же иерархии моей функции rotateWheel() и всего остального, если не отправляет никаких ошибок, поэтому я не понимаю, почему он отправляет ошибку.

сообщение об ошибке отправляется в строку со звездочками

Ответ №1:

Ты либо хочешь setTimeout(() => this.rotateWheel(), 30) , либо setTimeout(this.rotateWheel.bind(this), 30); . В противном случае, когда rotateWheel вызывается, this привязывается к window объекту (или global объекту в узле).

Комментарии:

1. Большое спасибо, теперь все исправлено! 😀

2. @OmarTorres пожалуйста, примите это как свой ответ. Так что никому не нужно искать помощи в этой теме