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 atribut specifica adresa unde sunt trimise datele din formular?
method action name
<form action="script.php" method="post"> ... </form>
Ce proprietate CSS desparte cuvinte lungi, adaugand pe rand nou?
word-wrap line-height font-size
#id {
  width: 100px;
  word-wrap: break-word;
}
Ce functie aranjeaza elementele din array in ordine alfabetica, bazat pe valorile lor?
pop() sort() shift()
var tutorials = ["php", "html", "css", "flash"];
tutorials.sort();
alert(tutorials[0]);          // css
Indicati functia care returneaza valoarea ultimului element din array.
current() next() end()
$code =[10=>"Perl", 20=>"PHP", 21=>"Python", 30=>"JavaScript");
$last = end($code);
echo $last;      // JavaScript
Alegeti verbul auxiliar corect care trebuie in propozitia: "Her plane ... just arrived".
have has does
Her plane has just arrived.
- Avionul ei tocmai a sosit.
Indicati forma corecta a verbului SER (a fi) in propozitia: "Vosotros ... muy simpáticos".
son soy sois
Vosotros sois muy simpáticos.
- Sunteti foarte simpatici.
setTimeout si this in functii din clasa

Last accessed pages

  1. Creare link-uri (20533)
  2. Harti de imagini (9495)
  3. Conditional IF in Limba Engleza - Fraze Conditionale (124275)
  4. Liste HTML - UL, OL (11400)
  5. Curs HTML gratuit Tutoriale HTML5 (197718)

Popular pages this month

  1. Cursuri si Tutoriale: Engleza, Spaniola, HTML, CSS, Php-Mysql, JavaScript, Ajax (158)
  2. Curs HTML gratuit Tutoriale HTML5 (133)
  3. Coduri pt culori (96)
  4. Creare si editare pagini HTML (89)
  5. Gramatica limbii engleze - Prezentare Generala (81)