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 e folosit pentru a adauga liste cu definitii in element <dl>?
<dt> <dd> <li>
<dl>
 <dt>HTML</dt>
  <dd> - Hyper Text Markup Language</dd>
  <dd> - Limbaj de cod pentru pagini web</dd>
</dl>
Care proprietate CSS poate sa ascunda un element in pagina, lasand spatiu gol in locul lui?
display position visibility
#id {
  visibility: hidden;
}
Indicati evenimentul declansat cand se apasa clic pe un obiect in pagina.
onclick onmouseover onfocus
document.getElementById("id").onclick = function(){
  alert("http://www.MarPlo.net/");
}
Indicati variabila PHP ce contine datele din $_GET, $_POST si $_COOKIE.
$_SESSION $_GET $_REQUEST
if(isset($_REQUEST["id"])) {
  echo $_REQUEST["id"];
}
Care din urmatoarele cuvinte reprezinta un Verb?
lighting believe path
I believe in my path.
- Eu cred in calea mea.
Care din urmatoarele cuvinte reprezinta un Verb?
creer camino iluminación
creer = a crede; camino = cale /drum; iluminación = iluminare
setTimeout si this in functii din clasa

Last accessed pages

  1. Curs si Tutoriale JavaScript (133554)
  2. Cursuri si Tutoriale: Engleza, Spaniola, HTML, CSS, Php-Mysql, JavaScript, Ajax (261445)
  3. Exemple de conversatii in limba engleza (4567)
  4. Dincolo de lumea asta există o lume pe care o vreau (51)
  5. Operatori in JavaScript (7862)

Popular pages this month

  1. Cursuri si Tutoriale: Engleza, Spaniola, HTML, CSS, Php-Mysql, JavaScript, Ajax (1089)
  2. Curs HTML gratuit Tutoriale HTML5 (888)
  3. Coduri pt culori (627)
  4. Creare si editare pagini HTML (519)
  5. Conditional IF in Limba Engleza - Fraze Conditionale (473)
Chat
Discuta sau lasa un mesaj pt. ceilalti utilizatori
Full screenInchide