@anthon-help

Вылезает ошибка в коде Uncaught TypeError?

Здравствуйте, есть код:
var Car = function (x, y) {
            this.x = x;
            this.y = y;
        };

        Car.prototype.draw = function () {
            var carHtml = '<img src="http://nostarch.com/images/car.png">';

            this.carElement = $(carHtml);

            this.carElement.css({
                position: "absolute",
                left: this.x,
                top: this.y,
            });

            $("body").append(this.carElement);
        };

        Car.prototype.moveRight = function(dx) {
            this.x += 5;

            if (this.x < dx) {
                setTimeout(function () {
                    return this.moveRight(dx);
                }, 30);
            } else {
                this.x = dx;
            }
            this.carElement.css({
                left: this.x,
                top: this.y
            });
        }

        var nissan = new Car(100, 200);
        nissan.draw();
        nissan.moveRight(500);


Он создаёт две машинки на координатах указанных в аргументах конструктора Car. Я создал функцию Car.prototype.moveRight, которая должна двигать код на 5 пикселей вправо. Мне нужно сделать это плавно, используя setInterval, но у меня не получается и выходит ошибка: Uncaught TypeError: this.moveRight is not a function
at oop.html:37
  • Вопрос задан
  • 48 просмотров
Решения вопроса 1
IonDen
@IonDen
JavaScript developer. IonDen.com
Функция которую вы передаете в setTimeout не имеет доступа к вашему this.
По этому 2 варианта:
1) Сохранить this в другую переменную, например self
const self = this;
setTimeout(function () {
    return self.moveRight(dx);
}, 30);


2) Использовать стрелочную функцию:
setTimeout(() => {
    return this.moveRight(dx);
}, 30);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
27 окт. 2020, в 15:42
1000 руб./в час
27 окт. 2020, в 15:30
100000 руб./за проект
27 окт. 2020, в 15:28
100000 руб./за проект