Programování prototyp orientovaný je forma objektově orientovaného programování bez tříd, založený na konceptu prototypu. Prototyp je objekt, ze kterého jsou vytvořeny nové objekty. V prototypově orientovaném programovacím jazyce Self se vlastnosti objektu, ať už odkazují na atributy nebo na metody, nazývají sloty ; mezi datovými a kódovými sloty není stejný rozdíl, jaký máme u tříd. Velkým rozdílem v programování mezi objekty je, že můžete nahradit obsah slotů, přidat další nebo změnit hierarchii dědičnosti, ať už je to v původním objektu nebo ne.
Self byl první prototypový jazyk. Byl navržen v laboratořích Sun v 90. letech . Nejznámějším v současnosti je JavaScript .
Objekty třídy:
Prototypové objekty:
Jedním z hlavních zájmů prototypů je dynamická dědičnost: jakýkoli objekt může kdykoli změnit rodiče za běhu.
Můžeme zhmotnit paradigmata objekt-prototyp a objekt-třída tím, že si všimneme rozdílu ve využití paměti.
V současné době existuje několik jazyků založených na prototypových objektech: Self , Lisaac nebo jazyky implementující specifikaci ECMAScript ( JavaScript , ActionScript , JScript ). Self a JavaScript jsou dynamicky psané jazyky a jsou interpretovány. Lisaac a ActionScript jsou staticky napsány a kompilovány. V rámci jazyka ActionScript 3.0 není prototypová dědičnost primárním mechanismem dědičnosti, protože tato role také spadá do třídní dědičnosti, která je nyní v této verzi k dispozici.
Vlastnosti objektů se hledají v řetězci dědičnosti stejným způsobem jako hodnota proměnných v zásobníku kontextů provádění.
Písmo je foo.barinterpretováno následovně:
Není to statická kopie proměnné; pokaždé, když překladač (tlumočník) narazí na identifikátor, interpretuje jej, jak je uvedeno.
Protože vlastnost deklarovaná v objektu je nalezena jako první, skrývá ty se stejným názvem, jaké by mohly existovat v prototypech, které objekt zdědí. Například prototyp objektu Objectmá metodu, toStringkterá vrací popis objektu pro jakýkoli typ objektu. Objekty zkonstruované Date()zděděním z prototypu této funkce, včetně metody, toStringkterá vrací více užitečných informací; Tato skryje metody toStringz Object.prototype.
Objekt zdědí prototyp od svého konstruktoru. Pokud k inicializaci objektu nepoužíváte konstruktor, můžete k vytvoření tohoto odkazu použít prázdnou funkci.
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, }Tento příklad ukazuje dědičnost vlastnosti, která vrací hodnotu typu number; dědění odkazů na objekt, včetně metody, se provádí stejným způsobem.