Как получить доступ к this объекта внутри метода в котором есть вложенная функция?
у объекта есть метод:
move(){
setInterval(function(){
if(this.direction==0){
this.moveRight;
console.log("try move right");
}
else
if(this.direction==1){
this.moveLeft;
console.log("try move left");
}
else
if(this.direction==2){
this.moveUp;
console.log("try move up");
}
else
if(this.direction==3){
this.moveDown;
console.log("try move down");
}
else{
console.log("i am standing...");
}
return this;
},1000);
}
как можно заставить выполняться методы this.moveRight, this.moveLeft, this.moveUp, this.moveDown?
на данный момент контекст this - это Window, а методов - undefined.
Ответы (1 шт):
Автор решения: highpassion
→ Ссылка
Пример функции-конструктора, которая создает объект, колбэк-функцию для setInterval оформлено стрелочной функцией для сохранения значения this (сам объект). Методы вызываются как и обычные функции с добавлением круглых скобок.
Объявил метод moveRight отдельно для демонстрации работы кода.
Справка:
this
Методы объекта и this
Стрелочные функции
Привязка контекста
function Mover () {
this.direction = 0;
this.moveRight = function() {
console.log('moving right');
}
this.move = function(){
setInterval( ()=> {
if(this.direction==0){
this.moveRight();
console.log("try move right");
}
else
if(this.direction==1){
this.moveLeft();
console.log("try move left");
}
else
if(this.direction==2){
this.moveUp();
console.log("try move up");
}
else
if(this.direction==3){
this.moveDown();
console.log("try move down");
}
else{
console.log("i am standing...");
}
return this;
},1000);
}
}
let runner = new Mover();
runner.move();