Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Вызов метода через setTimeout из самого себя (https://javascript.ru/forum/events/16683-vyzov-metoda-cherez-settimeout-iz-samogo-sebya.html)

leoHex 17.04.2011 22:26

Вызов метода через setTimeout из самого себя
 
Доброго времени суток ув. форумчане! подскажите пожалуйста почему не работает такой код?

var Tfade=function(){}

Tfade.prototype.fadeIn=function() {
   setTimeout(function () { this.fadeIn(); }, 100);
 }

var fade=new Tfade();

fade.fadeIn();

рони 17.04.2011 22:58

leoHex,
когда setTimeout сработает this будет = window а не fade.
Используйте замыкание или arguments.callee
<div id="test">test</div>
<script type="text/javascript">
var Tfade=function(){};
Tfade.prototype.fadeIn=function() {
document.getElementById('test').childNodes[0].data +=1;
var a = this;
setTimeout(function () { return function(b){b.fadeIn()}(a)}, 500);
 }
var fade=new Tfade();
fade.fadeIn();
</script>


<div id="test">test</div>
<script language="JavaScript" type="text/javascript">
var Tfade=function(){}
Tfade.prototype.fadeIn=function() {
document.getElementById('test').childNodes[0].data +=1;
setTimeout( arguments.callee, 500);
 }
var fade=new Tfade();
fade.fadeIn();
</script>

leoHex 18.04.2011 00:28

спасибо большое! всё работает! только почему arguments.callee не предает переменные fade я не понял... или оно и не должно?


Часовой пояс GMT +3, время: 18:46.