1

Никак не могу понять почему в строке присвоения this.id = 120 браузер ругается. Что не так с this?

class Proba {
 constructor(){
   this.id;
 }
 anim () {
   function go () {
     this.id = 120;
     console.log(this.id);
   }
   go();
 }
}

let proba = new Proba();
proba.anim();

1 Answers1

1

Так происходит потому что теряется контекст класса в функции go. Необходима привязка! Код ниже. Либо используйте стрелочную функцию (код второй). Прочтите что такое Привязка контекста к функции

class Proba {
 constructor(){
   this.id;
 }
 anim () {
   function go () {
     this.id = 120;
     console.log(this.id);
   }
   go.bind(this)();
 }
}

let proba = new Proba(); proba.anim();

class Proba {
 constructor(){
   this.id;
 }
 anim () {
   const go = () => {
     this.id = 120;
     console.log(this.id);
   }
   go();
 }
}

let proba = new Proba(); proba.anim();

Dmitrii Sedov
  • 4,342
  • 1
  • 8
  • 13