0

Вызываю метод sayMeow() в методе voice() без таймаута. Все норм

   function catTemplate(cat) {
    this.word = 'meow',
    this.sayMeow = function(){
        console.log(this.word);
    }
    this.voice = function(){
       this.sayMeow();
    };
}
var Barsik = new catTemplate;
Barsik.voice();

С таймаутом not a function

 function catTemplate(cat) {
    this.word = 'meow',
    this.sayMeow = function(){
        console.log(this.word);
    }
    this.voice = function(){
        setTimeout(this.sayMeow , 1000)
    };
}
var Barsik = new catTemplate;
Barsik.voice();

1 Answers1

0

Так происходит потому что теряется контекст (В данном случае this Вашего класса). Для того чтобы исправить данную проблему необходимо осуществить привязку контекста к данному методу используя bind(). Привязка контекста к функции

 function catTemplate(cat) {
    this.word = 'meow',
    this.sayMeow = function(){
        console.log(this.word);
    }
    this.voice = function(){
        setTimeout(this.sayMeow.bind(this) , 1000)
    };
}
var Barsik = new catTemplate;
Barsik.voice();
Dmitrii Sedov
  • 4,342
  • 1
  • 8
  • 13