Ú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 new vytvoří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 new u 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.