Curs Javascript

setTimeout() poate fi utilizat pentru a apela o functie dupa un anumit timp, si pentru a executa o functie de mai multe ori (daca e adaugat in ea). Dar 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.
<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>
Daca testati codul de mai sus in navigatorul Chrome, in JavaScript Console va apare aceasta eroare:
TypeError: Object [object Window] has no method 'method'
Ceea ce inseamna ca scriptul cauta functia method() in domeniul global, obiectul window. Cuvantul "this" folosit in setTimeOut face referire la el insusi.

• 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.
<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>
Clic pe butonul Demo ca sa vedeti rezultatul.

Un Test simplu in fiecare zi

HTML
CSS
JavaScript
PHP-MySQL
Engleza
Spaniola
Care tag se foloseste in <table> pentru a crea celula de tip "header"?
<thead> <th> <td>
<table><tr>
  <th>Title 1</th>
  <th>Title 2</th>
</tr></table>
Ce proprietate CSS seteaza distanta dintre randuri?
line-height word-spacing margin
.some_class {
  line-height: 150%;
}
Care functie deschide o noua fereastra.
alert() confirm() open()
document.getElementById("id_button").onclick = function(){
  window.open("http://coursesweb.net/");
}
Indicati functia PHP care returneaza un array cu numele fisierelor si directoarelor dintr-un director.
mkdir() scandir() readdir()
$ar_dir = scandir("dir_name");
var_export($ar_dir);
Care din urmatoarele forme a verbului "sleep" (a dormi) se foloseste pentru viitor?
sleeping slept will sleep
He will sleep there.
- El va dormi acolo.
Care din urmatoarele forme a verbului "dormir" (a dormi) se foloseste pentru viitor?
dormido dormirá durmiendo
Él dormirá allí.
- El va dormi acolo.
setTimeout si this in functii din clasa

Last accessed pages

  1. Utilizare Functii si Parametri lor (1710)
  2. Prezent perfect si Prezent perfect continuu - Present perfect and Continuous (61426)
  3. Viitor perfect si Viitorul perfect continuu - Future perfect and Continuous (14529)
  4. Download carti electronice si programe pentru Limba Engleza (28448)
  5. Coduri pt culori (40769)

Popular pages this month

  1. Cursuri si Tutoriale: Engleza, Spaniola, HTML, CSS, Php-Mysql, JavaScript, Ajax (4197)
  2. Curs HTML gratuit Tutoriale HTML5 (3452)
  3. Curs si Tutoriale JavaScript (2985)
  4. Curs PHP MySQL, Tutoriale si Scripturi PHP (2948)
  5. Curs CSS Online Tutoriale CSS3 (2900)