Úloha 3 – Porovnání metod new Object(), konstruktor a Object.create()
Úvod do úlohy
Jakmile si studenti osvojí vytváření objektů pomocí objektového literálu, je vhodné ukázat i další možnosti. Tyto alternativní způsoby sice nejsou v praxi pro jednoduché scénáře tak běžné, ale pomáhají pochopit, jak JavaScript s objekty pracuje pod povrchem. Navíc se s nimi můžete setkat ve starších kódech nebo při čtení dokumentace. Důležité je rozlišit, kdy je vhodné použít literál a kdy naopak oceníme konstruktorovou funkci či Object.create().
Teorie a principy
-
new Object()
-
Vytváří prázdný objekt pomocí vestavěného konstruktoru.
-
Lze do něj přidávat vlastnosti postupně.
-
Syntaxe je delší a méně přehledná než literál.
-
-
Konstruktorová funkce
-
Definujeme funkci, která nastaví výchozí hodnoty vlastností.
-
Použitím
newvytvoříme instanci objektu se stejným „plánem“. -
Dává smysl, když chceme vytvořit více podobných objektů.
-
-
Object.create()
-
Umožňuje vytvořit nový objekt, který má jako prototyp jiný objekt.
-
Hodí se pro explicitní práci s dědičností prototypů.
-
Je užitečné pochopit, ale pro začátečníky může působit složitě.
-
-
Literál
-
Nejkratší a nejpřehlednější zápis pro běžné případy.
-
Používá se ve většině moderního kódu.
-
Praktické příklady kódu
Typické chyby / záludnosti
-
Zapomenutí klíčového slova
newu konstruktorové funkce: -
Nepochopení rozdílu mezi vlastnostmi a prototypem – vlastnosti nastavené přes
Object.create()mohou být „zděděné“ z prototypu, a tedy nejsou přímo zapsány v samotném objektu. -
Používání new Object() tam, kde je lepší literál – literál je stručnější a čitelnější.
Shrnutí
-
Objekty lze tvořit více způsoby, ale nejpřehlednější je literál.
-
new Object()je zastaralejší a zbytečně ukecaný způsob. -
Konstruktorová funkce umožňuje vytvářet více podobných instancí se stejnou strukturou.
-
Object.create()je silný nástroj pro práci s prototypovou dědičností. -
V běžné praxi pro jednoduché objekty zůstaňte u literálu, ostatní techniky slouží spíše pro speciální případy nebo hlubší pochopení jazyka.