Acesta este ultimul episod al serialului dedicat fundamentelor programării. Ne vom ocupa tot de obiecte, mai exact de obiectul curent.
Am spus că obiectele au funcții; funcțiile pot accesa sau modifica proprietățile obiectului. Există situații în care avem nevoie să folosim obiectul cu totul; câteva dintre ele sunt:
- dorim să facem distincție între proprietățile obiectului și eventuale variabile sau eventuali parametri cu același nume;
- dorim să apelăm o funcție (posibil a altui obiect) și care are nevoie de un parametru de tipul obiectului nostru și dorim să folosim ca argument obiectul curent;
- avem o funcție care returnează un obiect care are tipul respectiv și dorim să returnăm obiectul curent.
În JavaScript putem accesa obiectul curent folosind cuvântul this. E ca și cum am avea o variabilă a cărei valoare este chiar obiectul curent. De fapt, am văzut deja că avem nevoie de acest this pentru a accesa proprietățile obiectului curent.
Accesarea proprietăților obiectului curent
În episodul anterior am lucrat cu scoruri; nu am folosit constructori, dar dacă am dori unul ar putea arăta așa:
1 2 3 4 |
function scor(goluriGazde, goluriOaspeti) { this.gazde = goluriGazde this.oaspeti = goluriOaspeti } |
Dacă dorim, putem denumi parametri constructorului gazde și oaspeti (nu mai trebuie să inventăm o nouă denumire). Folosind this este clar care este proprietatea și care este parametrul.
1 2 3 4 |
function scor(gazde, oaspeti) { this.gazde = gazde this.oaspeti = oaspeti } |
În stânga avem proprietatea și în dreapta avem parametrul. Evident, nu doar în constructori se poate folosi această idee. Am putea avea o funcție care stabilește valoarea unei proprietăți (o astfel de funcție se numește setter):
1 2 3 |
setGazde: function(gazde) { this.gazde = gazde } |
Putem pune setter-ul și în interiorul constructorului și ar arăta aproape ca o proprietate:
1 2 3 4 5 6 7 |
function Scor(gazde, oaspeti) { this.gazde = gazde this.oaspeti = oaspeti this.setGazde = function(gazde) { this.gazde = gazde } } |
Transmiterea obiectului curent ca argument
Să presupunem că avem un obiect care reprezintă tabela de marcaj a unui stadion. Pentru a afișa scorul curent al partidei tabela ne-ar putea pune la dispoziție o funcție care să aibă ca parametru un Scor. O implementare simplă ar putea fi:
1 2 3 4 5 |
var Tabela = { afiseaza: function(scor) { alert("GAZDE " + scor.gazde + " - " + scor.oaspeti + " OASPETI") } } |
Obiectul nu are proprietăți simple, doar o funcție. Nu întâlnim foarte des așa ceva, dar este suficient atât pentru a arăta cum transmitem obiectul curent ca argument.
Acum, în interiorul obiectului Scor trebuie să avem un obiect de tip Tabela. Poate fi o proprietate sau poate apărea într-o funcție (ca argument sau variabilă locală). Oricum ar fi, dacă la un moment dat avem o Tabela, scorul curent ar putea fi afișat pe tabelă folosine apelul:
1 |
Tabela.afiseaza(this); |
Un exemplu ar fi:
1 2 3 |
this.afiseazaPeTabela = function(tabela) { tabela.afiseaza(this) } |
Observăm o referință circulară aici: scorul folosește tabela care folosește scorul. Așa ceva nu este recomandat, deși este corect. Aici am introdus referința pentru a ilustra cât mai simplu transmiterea obiectului curent, dar practica trebuie evitată.
Returnarea obiectului curent
Uneori dorim ca o funcție să returneze obiectul curent: de exemplu, dacă scorul se modifică, am putea dori să returnăm noul scor. Să modificăm puțin funcțiile apelate atunci când se înscriu goluri:
1 2 3 4 5 6 7 8 9 10 11 |
this.golGazde = function() { alert("Gol GAZDE") this.gazde++ return this } this.golOaspeti = function() { alert("Gol OASPETI") this.oaspeti++ return this } |
Putem folosi acum obiectele astfel:
1 2 3 |
var scor = new Scor(0, 0) Tabela.afiseaza(scor.golGazde()) Tabela.afiseaza(scor.golOaspeti()) |
În JavaScript, this poate fi utilizat și în alte scopuri, dar aceste utilizări sunt specifice limbajului.
La final
Acesta a fost versiunea JavaScript a serialului dedicat fundamentelor programării. Scopul nu a fost prezentarea limbajului JavaScript, ci doar exemplificarea elementelor de bază folosind acest limbaj. Am încercat să prezentăm elemente comune majorității limbajelor de programare. Vă mulțumim că ne-ați urmărit pe parcursul acestui serial și așteptăm sugestiile voastre pentru a completa informațiile prezentate.