Naučte se

Objekty v JavaScriptu

Javascript lze považovat za objektově orientovaný jazyk. Objekt je datový typ, který v sobě organizuje data a funkce. V JS si objekt si můžem představit jako dynamickou kolekci členských proměnných. Tedy seznam dvojic, která nese unikátní název členské proměnné a její nějakou hodnotu.

Inicializace a deklarace objektu

V JS jsou tři způsoby jakým můžeme inicializovat objekt. 1.

Poomocí Object.create().

var objektA = Object.create()
var objektB = Object.create({})

Spousta programtorů je na tento způsob zvyklá z jazyků jako Java, C++ nebo PHP, kde používá klíčové slovo new k vytváření noové instance objektu.

var objektC = new Object();

Oblíbený způsob je pomocí tzv. object literal notation. Inicializace objektu s čárkami oddělený seznam členských proměnných s jejich hodnotami uzavřený do složených závorek ({}).

var objektC = {};

Prototype

Dalším ze způsobů, jak vytvořit objekty v JavaScriptu, je použití konstruktoru funkce (simulace třídy).

Proměnné deklarované uvnitř funkce se nachází v prototypu (na obrázku je zobrazen jako __proto__), nikoli v instanci objektu. To je poměrně důležité, protože kdybychom měli tisíc instancí objektu, mohly by všechny sdílet odkaz na stejnou metodu, místo aby bylo všude deset tisíc kopií těchto metod.

Když je tento objekt vytvořen, JavaScript přidá vlastnost __proto__ do nově vytvořeného objektu, který se nazývá dunder proto. dunder proto nebo __proto__ ukazuje na prototypový objekt funkce konstruktoru.

Přístup ke členským proměnným

Existují dva způsoby, jak získat přístup k vlastnostem objektu.

 Tečkový zápis:.
 Značka závorky: [] 

Základní objekt

Základní objekt, je speciální objekt z kterého jsou dědí všechny ostatní objekty. Javascript má také speciální objekty, které se nazývají build-in objekt, nativní funkce. Funkce jsou základní objekty a patří mezi ně také Boolean a Symbol.

(function() {}) instanceof Object

new Boolean(true) instanceof Object

Dědičnost prototypů

Mnoho objektově orientovaných jazyků využívá objektový model založený na třídách (class-based), avšak javascript je postavený na prototypech. Tedy dědičnost funguje trochu jinak než u jazyků jako je Ruby, Python, Java, PHP, Scala atd.2 Objekty dědí z ostatních objektů, ne z tříd.

Prototypy jsou jednodušší koncept. Jeho nevýhodou je, že se v něm dělají hůře classifikace a taxonomie, které programátoři tvoří pomocí UML diagramů.

Konverze typů

Někdy bychom chtěli používat operátory i s objekty. Javascript nám nedovoluje přetěžovat operátory, nicméně nám dovoluje vyžít abstraktních metod ke konverzi objektu na primitivní datový typ.

Související