1

Имеется простенький код:

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: &quot;absolute&quot;,
       top: this.y,
       left: this.x
    })

    $(&quot;body&quot;).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. до этого момента всё работает прекрасно!

  • "то вообще ни разу" - ошибки - в консоли –  Sep 28 '21 at 16:18

2 Answers2

1
setInterval(nissan.moveRight.bind(nissan), 1000);

setInterval(function() { nissan.moveRight(); }, 1000);
1

Зачем вам 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;
}
nazarpunk
  • 2,418