De programare orientat spre prototip este o formă de programare orientat-obiect fără clase, bazat pe conceptul de prototip. Un prototip este un obiect din care sunt create obiecte noi. În limbajul de programare auto- prototip orientat , proprietățile unui obiect, indiferent dacă se referă la atribute sau la metode, se numesc sloturi ; nu există aceeași distincție între sloturile de date și sloturile de cod pe care le avem cu clasele. Diferența mare cu programarea obiect-la-clasă este că puteți înlocui conținutul sloturilor, puteți adăuga mai multe sau puteți schimba ierarhia moștenirii , indiferent dacă acest lucru este furnizat în obiectul original sau nu.
Sinele a fost primul limbaj prototip. A fost proiectat în laboratoarele Sun în anii 1990 . Cel mai cunoscut momentan este JavaScript .
Obiecte de clasă:
Obiecte prototip:
Unul dintre interesele majore ale prototipurilor este moștenirea dinamică: orice obiect poate schimba părintele în timpul rulării, în orice moment.
Putem materializa paradigmele obiect-la-prototip și obiect-la-clasă, observând diferența în utilizarea memoriei.
În prezent există mai multe limbaje bazate pe obiecte prototip: Self , Lisaac sau limbaje care implementează specificația ECMAScript ( JavaScript , ActionScript , JScript ). Sinele și JavaScript sunt limbi scrise dinamic și sunt interpretate. Lisaac și ActionScript sunt tipizate și compilate static . În cadrul ActionScript 3.0, moștenirea prototip nu este mecanismul principal pentru moștenire, deoarece acest rol revine și moștenirii de clasă prezentă acum în această versiune.
Proprietățile obiectelor sunt căutate în lanțul de moștenire în același mod ca valoarea variabilelor din stiva de contexte de execuție.
Scrierea este foo.barinterpretată după cum urmează:
Nu este o copie statică a variabilei; de fiecare dată când compilatorul (interpretul) întâlnește identificatorul, îl interpretează așa cum este indicat.
Deoarece o proprietate declarată în obiect este găsită mai întâi, aceasta le ascunde pe cele cu același nume care ar fi putut exista în prototipurile pe care le moștenește obiectul. De exemplu, prototipul obiectului Objectare o metodă toStringcare returnează o descriere a obiectului, pentru orice tip de obiect. Obiectele construite prin Date()moștenesc prototipul acestei funcții, inclusiv o metodă toStringcare returnează informații mai utile; aceasta ascunde metoda toStringde Object.prototype.
Un obiect moștenește prototipul de la constructorul său. Dacă nu utilizați un constructor pentru a inițializa un obiect, puteți utiliza o funcție goală pentru a crea acest link.
var A = {}; // identique à « var A = new Object(); » var B = (function () { function F() {} F.prototype = A; return new F(); }()); // depuis JavaScript 1.8.5 la méthode « Object.create(A); » a le même effet // à présent A est dans la chaîne de recherche d'identifiants de B A.compte = 0; A.separ = ": "; B.separ = ", "; for (A.compte = 0; A.compte < 10; A.compte++) { document.write(B.compte + B.separ) // 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, }Acest exemplu arată moștenirea unei proprietăți care returnează o valoare a numărului de tip; moștenirea referințelor la un obiect, inclusiv o metodă, se face în același mod.