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 este element de tip bloc?
<div> <img> <span>
<div>Web Programming and Development</div>
Care cod CSS afiseaza textul subliniat?
font-style: italic; text-decoration: underline; font-weight: 500;
h2 {
  text-decoration: underline;
}
Clic pe functia JavaScript care apeleaza o alta functie dupa un anumit timp.
insertBefore() setTimeout() querySelector()
function someFunction() { alert("CoursesWeb.net"); }
setTimeout("someFunction()", 2000);
Clic pe instructiunea care returneaza numarul total de elemente dintr-un array asociativ.
count($array) count($array, 1) strlen()
$food =["fruits" =>["banana", "mar"), "veggie" =>["ceapa", "rosie"));
$nr_food = count($food, 1);
echo $nr_food;       // 6
Indicati Viitorul Perfect la negativ al verbului din paranteze, in propozitia: "The child (to not play) by Sunday".
has't played haven't been playing will haven't played
The child will haven't played by Sunday.
- Copilul nu s-ar fi jucat pana duminica.
Indicati Viitorul Perfect pentru verbul "contar" (a povesti) la forma "Él".
habrá contado va a contar contaba
Él no habrá contado el cuento.
- El nu ar fi spus povestea.
setTimeout si this in functii din clasa

Last accessed pages

  1. Coduri pt culori (66296)
  2. Articolul din limba engleza - The article (66904)
  3. Cugetari de`ale vietii - prin 2008, 2009, 2010 (161)
  4. HTML5 - Elemente si atribute noi in formular (4732)
  5. Creion si Stilou (344)

Popular pages this month

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