1

Почему в интервал не работает, если в него метод вставить, а если этот метод завернуть в функцию, а эту функцию вставить в интервал - тогда он работает.

function Car(x, y, name, country) {
            this.x = x;
            this.y = y;
        };
    Car.prototype.draw = function () {
        let carHtml = '<img src="images/' + this.name + '.png">';
    this.carElement = $(carHtml);

    this.carElement.css ({
        width: &quot;200px&quot;,
        position: &quot;absolute&quot;,
        left: this.x,
        top: this.y
    });

    $('body').append (this.carElement); 
};
Car.prototype.moveDown = function () {
    this.carElement.css({
        left: this.x,
        top: this.y += 5
    });
};
let tesla = new Car (30, 50);
tesla.draw();

НЕ РАБОТАЕТ!!! function int() { var intAnim = setInterval(tesla.moveDown(), 1000); return intAnim; };

НЕ РАБОТАЕТ!!! setInterval(tesla.moveDown(), 1000);

РАБОТАЕТ! setInterval(function () {tesla.moveDown()}, 1000); ПОЧЕМУ ТАК???

Yan.Lst
  • 15

3 Answers3

0

НЕ РАБОТАЕТ!!! setInterval(tesla.moveDown(), 1000);

Потому что в setInterval первым параметром передается undefined, который возвращается из tesla.moveDown().

0

Используйте:

setInterval(tesla.moveDown.bind(tesla), 1000);

Подробнее про метод bind можно прочитать на MDS Web Docs.

Oliver Patterson
  • 4,468
  • 2
  • 6
  • 22
0

Потому что в setInterval вы должны передать ссылку на функцию или написать саму функцию внутри. А вы сразу выполняете действие.

function move(){
 tesla.moveDown()
}

setInterval(move(),1000) //сразу выполнение функции. setInterval НЕ сработает setInterval(move,1000) //ссылка на функцию. setInterval сработает setInterval(()=> tesla.moveDown(),1000) //функция внутри, setInterval сработает