@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
  • Вопрос задан
  • 58 просмотров
Решения вопроса 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);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы
23 нояб. 2024, в 00:16
2000 руб./за проект
22 нояб. 2024, в 23:55
3000 руб./за проект
22 нояб. 2024, в 22:26
3500 руб./за проект