Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > JavaScript, Ajax
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.12.2016, 01:41   #1
polin11
Форумчанин
 
Регистрация: 07.06.2015
Сообщений: 164
По умолчанию Повторение метода экземпляра класса

Повторение метода экземпляра класса
Есть класс, нужно чтобы имя экземпляра выводилось в DOM с промежутком 1 сек. Есть прекрасные функции setInterval, setTimeout.
Пробовал так
Код HTML:
<html>
<head>
<script type="text/javascript">
function animal()
{
    this.name="WOLF";
}
animal.prototype.repeat=function(){
	console.log(this);
	document.getElementById('target').innerHTML+=this.name+'<br/>';
}
document.addEventListener('DOMContentLoaded', function () {
var ex=new animal();

setInterval(ex.repeat(), 1000); //отображается 1 раз имя на странице и в консоль 

});
</script>
</head>
<body>
<div id="target"></div>
</body>
</html>
Еще так
Код HTML:
<html>
<head>
<script type="text/javascript">
function animal()
{
    this.name="WOLF";
}
animal.prototype.repeat=function(){
	console.log(this);
	document.getElementById('target').innerHTML+=this.name+'<br/>';
	setInterval(this.repeat(), 1000); //На страницу и в консоль не выводит, браузер зависает
}
document.addEventListener('DOMContentLoaded', function () {
var ex=new animal();
ex.repeat();
});
</script>
</head>
<body>
<div id="target"></div>
</body>
</html>
И так:

Код HTML:
<html>
<head>
<script type="text/javascript">
function animal()
{
    this.name="WOLF";
}
animal.prototype.repeat=function(){
	console.log(this);
	document.getElementById('target').innerHTML+=this.name+'<br/>';
	setTimeout(this.repeat(), 1000); //В консоль выводит, но на страницу нет, браузер зависает
}
document.addEventListener('DOMContentLoaded', function () {
var ex=new animal();
ex.repeat();
});
</script>
</head>
<body>
<div id="target"></div>
</body>
</html>
Помогите как сделать
polin11 вне форума Ответить с цитированием
Старый 21.12.2016, 11:32   #2
Naive
Раздолбайских Дел
Старожил
 
Аватар для Naive
 
Регистрация: 22.05.2009
Сообщений: 3,828
По умолчанию

setInterval/setTimeout первым аргументом принимает функцию или строку кода (технически можно, но не надо так делать), а ты передаешь во всех случаях результат выполнения функции.
Поэтому у тебя в первом случае отрабатывает 1 раз (функция выполняется единожды и возвращает undefined, который и будет выполняться каждую секунду), в двух других функция мгновенно выполняется в теле самой себя и падает в вечную рекурсию, отсюда браузер виснет. В этих двух случаях не важно вывел ли браузер что-то в консоль или на страницу, тут речь идет о том, как браузер оптимизировал этот код. Если поставить блокер типа алерта до вызова, то браузер будет методично его выводить и в рекурсию не свалится, блокер просто не даст ему понять что он в вечной рекурсии.
Alar, верни репу!
Naive вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вызов конструктора производного класса для экземпляра базового класса max_prorok Помощь студентам 5 09.09.2015 09:39
Создание экземпляра класса по имени Lasor Общие вопросы C/C++ 24 17.12.2012 22:28
Создание экземпляра класса biohazard120 Общие вопросы Delphi 11 15.09.2012 13:23
Освобождение памяти от экземпляра класса Mixim Общие вопросы .NET 8 05.01.2011 17:27
удаление экземпляра класса Juffin Общие вопросы Delphi 5 02.11.2010 11:57