Форум программистов
 
Расширенный поиск
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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

Excel VBA, CAD, Софт, ОС, Windows, Ubuntu, Android, VPS
Win Api, Assembler, C++, Java, Pascal, Lazarus, Delphi, OpenGL, DirectX
C#, Qt, .NET, ASP.NET, Windows Forms, ADO.NET, Framework, WPF, UWP, WinRT, XAML
HTML, CSS, JavaScript, Ajax, PHP, Perl, Python, Ruby, SQL, WordPress, API, XML, JSON, ActionScript, Flash

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

Повторение метода экземпляра класса
Есть класс, нужно чтобы имя экземпляра выводилось в 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, 12:32   #2
Naive
Раздолбайских Дел
Профессионал
 
Аватар для Naive
 
Регистрация: 22.05.2009
Адрес: Екатеринбург
Сообщений: 3,470
Репутация: 1785
По умолчанию

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



Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

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




16:57.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.

Покупайте на сайте www.skinon.ru уникальные чехлы и наклейки для телефонов.
купить трафик


как улучшить посещаемость, а также решения по монетизации сайтов, видео и приложений

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru