Cauta rapid aici ↑

Prototype si Construct

In JavaScript obiectele au o stare a lor. Obiectele pot avea in spatele lor un alt obiect prototip care sa contine alte proprietatii, functii ce apartin aceluiasi obiect. Altfel spus, putem prin acest mod sa declaram anumite elemente componente ale unui obiect in alt obiect si sa apartina aceluiasi obiect dintai.

Obiectul dintai mai are o stare a lui, cea de construct. Toate obiectele au aceasta stare ca setare de baza. Practic reprezinta obiectul care primeste toate elementele mostenite de la alte obiecte (daca exista) declarate cu ajutorul cuvantului cheie prototype.

Prototype

Obiectele in JavaScript pot avea prototipuri, modele ale acestora ce contin diferite proprietati si / sau functii pe care le declaram ca fiind de baza ale acelui obiect chiar daca nu sunt declarate in obiectul cu pricina. JavaScript ne ofera posibilitatea sa introducem proprietatii si / sau functii ce ii sunt atribuite unui obiect. Pentru a realiza acest lucru JavaScript ne ofera un alt cuvant cheie si acesta este prototype.

Cum se face

Declaram o functie cu rol de clasa in programul nostru. Acesteia ii atribuim metode si / sau proprietatii. Dupa ce am declarat aceasta functie cu rol de clasa, pe linia urmatoare vom scrie numele acestei functii clasa urmat de caracterul punct (.) si cuvantul prototype. De acest cuvant vom declara o functie sau proprietate ce ii va fi atribuita functiei clasa de mai sus si nu inainte de a lega proprietatea sau functia de cuvantul prototype cu ajutorul caracterului punct. Mai departe vom instantia functia clasa. Acum este timpul sa accesam elementul nou adaugat cu ajutorul cuvantului prototype.

IMPORTANT

In momentul in care ne apucam sa adaugam o proprietate sau o metoda intr-un obiect cu ajutorul cuvantului prototype , numele acesteia trebuie sa fie diferit de cele ce se afla deja in obiect, in caz contrar nu se va intampla nimic, veti scrie acele randuri degeaba si asta pentru ca JavaScript nu permite suprascrierea unui element dintr-un obiect prin aceasta modalitate. Prin folosirea cuvantului prototype putem sa adaugam, sau mai bine spus, facem referire la un alt obiect ce va putea fi accesat si din obiectul, functia caruia ii va apartine.

In JavaScript nu putem sa facem copii ale aceluiasi obiect, putem doar sa inlantuim, legam obiectele intre ele si mai apoi sa folosim proprietatile acestora dupa bunul plac. Interpretorul JavaScript va cauta o proprietate intr-un obiect si daca o gaseste o va folosi, daca nu va gasi acea proprietate interpretorul JavaScript va verifica daca respectivul obiect are un prototip si va cauta in acela si daca nici in acesta nu este gasita acea proprietate, atunci va verifica daca si acest obiect are un prototip s.a.m.d. pana gaseste proprietate sau metoda pe care vrem sa o folosim si daca in cele din urma nu gaseste acea proprietate atunci returneaza undefined.

Construct

Pana in prezent am lucrat cu obiecte ce aveau rol de constructor si nu am spus asta pana in acest moment. Declararea unei functii cu rol de clasa si mai apoi instantierea acesteia cu ajutorul cuvantului new ne permite sa cream o variabila obiect, asa cum am vazut in exemplele de mai sus. Practic aceasta variabila obiect are si rol de constructor.

In acest mod se presupune ca variabila obiect, ce este de fapt instantierea unei functii cu rol de clasa, detine toate proprietatile si metodele incapsulate in functia clasa.