Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 31.03.2020, 10:18
Новичок на форуме
Отправить личное сообщение для tone4ka Посмотреть профиль Найти все сообщения от tone4ka
 
Регистрация: 25.11.2019
Сообщений: 7

При спользовании 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
Ответить с цитированием
  #2 (permalink)  
Старый 31.03.2020, 10:35
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

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.
Ответить с цитированием
  #3 (permalink)  
Старый 31.03.2020, 10:43
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

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);
};
Ответить с цитированием
  #4 (permalink)  
Старый 31.03.2020, 12:01
Новичок на форуме
Отправить личное сообщение для tone4ka Посмотреть профиль Найти все сообщения от tone4ka
 
Регистрация: 25.11.2019
Сообщений: 7

Ясно, спасибо огромное!
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как по событию вызвать метод определенного экземпляра объекта jvs jQuery 3 24.12.2009 16:04
Снятие затемнения с экрана при получении ответа от php срипта с помощью setInterval roma86 jQuery 0 16.08.2009 12:39
Можно ли получить имя экземпляра объекта внутри самого объекта? Ichigeki Общие вопросы Javascript 9 14.11.2008 19:00
Проблема в document.write при использовании setInterval() GOll Общие вопросы Javascript 21 06.10.2008 17:38
Теряется event при перемещении объекта (Drag&Drop) seagor Events/DOM/Window 16 25.07.2007 01:28