При спользовании setinterval метод объекта не принимает аргумент
[ js ]
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>cars</title> </head> <body> <script src="https://code.jquery.com/jquery-2.2.4.js"></script> <script> var Car=function(x,y){ this.x=x; this.y=y; this.draw(); }; 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(s){ this.x+=s; this.carElement.css({ left:this.x, top:this.y }); }; Car.prototype.intRight=function(){ setInterval(this.moveRight(10).bind(this),30);// метод moveRight не принимает аргумент, не выполняется bind }; var tesla=new Car(20,20); var kia=new Car(100,200); tesla.intRight(); kia.intRight(); </script> </body> </html> [ /js ] Если из метода moveRight(s) убрать переменный аргумент s и заменить его фиксированным значением, то все работает, this при использовании setinterval передается с помощью bind, но как только я заменяю значение сдвига координаты x на переменную s- консоль выдает ошибку bind |
tone4ka,
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>cars</title> </head> <body> <script src="https://code.jquery.com/jquery-2.2.4.js"></script> <script> var Car=function(x,y){ this.x=x; this.y=y; this.draw(); }; 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(s){ this.x+=s; this.carElement.css({ left:this.x, top:this.y }); }; Car.prototype.intRight=function(){ var move = () => {this.moveRight(2); requestAnimationFrame(move);} requestAnimationFrame(move); }; var tesla=new Car(20,20); var kia=new Car(100,200); tesla.intRight(); kia.intRight(); </script> </body> </html> [html run] ... минимальный код страницы с вашей проблемой [/html] О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting. |
tone4ka,
или так Car.prototype.intRight=function(){ setInterval(() => this.moveRight(10),30); }; или так Car.prototype.intRight=function(){ var self = this; setInterval(function() { self.moveRight(10) },30); }; или так Car.prototype.intRight=function(){ setInterval(this.moveRight.bind(this, 10),30); }; |
Ясно, спасибо огромное!
|
Часовой пояс GMT +3, время: 10:48. |