![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Форумчанин
Регистрация: 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> |
![]() |
![]() |
![]() |
#2 |
Раздолбайских Дел
Старожил
Регистрация: 22.05.2009
Сообщений: 3,828
|
![]()
setInterval/setTimeout первым аргументом принимает функцию или строку кода (технически можно, но не надо так делать), а ты передаешь во всех случаях результат выполнения функции.
Поэтому у тебя в первом случае отрабатывает 1 раз (функция выполняется единожды и возвращает undefined, который и будет выполняться каждую секунду), в двух других функция мгновенно выполняется в теле самой себя и падает в вечную рекурсию, отсюда браузер виснет. В этих двух случаях не важно вывел ли браузер что-то в консоль или на страницу, тут речь идет о том, как браузер оптимизировал этот код. Если поставить блокер типа алерта до вызова, то браузер будет методично его выводить и в рекурсию не свалится, блокер просто не даст ему понять что он в вечной рекурсии.
Alar, верни репу!
|
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Вызов конструктора производного класса для экземпляра базового класса | 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 |