При спользовании 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, время: 00:14. |