Descriere:setTimeout() poate fi utilizat pentru a apela o functie dupa un anumit timp, si pentru a executa o functie
Download:
Autor:
Sursa (Link-ul oficial): Propria parere:Nu l-am incercat.
Tutorialul:
setTimeout() foloseste domeniul global in javascript, ceea ce poate fi o problema cand e adaugat in functii dintr-o clasa, deoarece nu poate fi utilizat alaturi de cuvantul special this.
De exemplu, in codul urmator, setTimeout() nu produce efectul pe care-l vrem.
Cod: Selectaţi tot
<div id="swprop"></div>
<script type="text/javascript">
// se defineste o functie clasa
var numeClasa = function() {
// se defineste o proprietate si o metoda publica
var prop = 0;
this.method = function() {
document.getElementById('swprop').innerHTML = prop; // adauga valoarea lui prop in #swprop
// adauga o unitate la prop la fiecare apelare, si auto-apeleaza functia la fiecare 0.5 sec., pana prop e mai mic de 5
prop++;
if(prop < 5) setTimeout('this.method()', 500);
}
}
// se creaza un obiect la clasa numeClasa, si apeleaza method()
var objTest = new numeClasa();
objTest.method();
</script>Cod: Selectaţi tot
TypeError: Object [object Window] has no method 'method'• Solutia in acest caz e crearea unei: var nume_variabila = this; in functia clasa si utilizare nume_variabila in loc de "this", deoarece "nume_variabila" va retine obiectul continut in "this".
- Aplicand aceasta solutie in codul de mai sus, scriptul va functiona cum dorim.
Cod: Selectaţi tot
<div id="swprop"></div>
<script type="text/javascript">
// se defineste o functie clasa
var numeClasa = function() {
var v_name = this; // retine obiectul continut in 'this'
// se defineste o proprietate si o metoda publica
var prop = 0;
this.method = function() {
document.getElementById('swprop').innerHTML = prop; // adauga valoarea lui prop in #swprop
// adauga o unitate la prop la fiecare apelare, si auto-apeleaza functia la fiecare 0.5 sec., folosind 'v_name'
prop++;
if(prop < 5) setTimeout(v_name.method, 500);
}
}
// se creaza un obiect la clasa numeClasa, si apeleaza method()
var objTest = new numeClasa();
objTest.method();
</script>
