Почему не отрабатывает SetInterval?
Имеется простенький код:
var Car = function (x, y) {
this.x = x;
this.y = y;
}
Car.prototype.draw = function () {
var carHTML = '<img src="img/car.png">';
this.carJq = $(carHTML);
this.carJq.css({
position: "absolute",
top: this.y,
left: this.x
})
$("body").append(this.carJq);
}
Car.prototype.moveRight = function () {
this.x += 5;
this.carJq.css({
left: this.x,
top: this.y
})
}
var tesla = new Car(10, 20);
var nissan = new Car(100, 200);
nissan.draw();
tesla.draw();
setInterval(nissan.moveRight, 1000);
С помощью прототипов добавил метод движения вправо для машин. Потом пытаюсь вызвать setInterval для nissan. Если в SetInterval передаю nissan.MoveRight(), то отрабатывает только один раз, если просто nissan.MoveRight, то вообще ни разу. Что не так? Уже голову сломал себе. p.s. до этого момента всё работает прекрасно!
Ответы (2 шт):
Автор решения: Igor
→ Ссылка
setInterval(nissan.moveRight.bind(nissan), 1000);
setInterval(function() { nissan.moveRight(); }, 1000);
Автор решения: nazarpunk
→ Ссылка
Зачем вам jquery в 2021 году то?
class Car {
constructor(x, y) {
this.x = x;
this.y = y;
this.$car = new Image();
}
draw() {
document.body.append(this.$car);
this.$car.src = 'img/car.png';
this.$car.alt = 'Car';
this.$car.style.position = `absolute`;
this.$car.style.top = `${this.y}px`;
this.$car.style.left = `${this.x}px`;
}
moveRight() {
this.x += 5;
this.$car.style.left = `${this.x}px`;
}
}
const tesla = new Car(10, 20);
const nissan = new Car(100, 200);
nissan.draw();
tesla.draw();
setInterval(() => nissan.moveRight(), 1000);
img {
border: 1px solid purple;
display: inline-block;
padding: .2rem;
}