This article has been localized into Czech by the community.
Úvod
Koncept objektově orientovaného programování (OOP) sahá až k průkopníkům programování v 50. a 60. letech 20. století. Jedním z nejdůležitějších aspektů OOP jsou třídy, které v podstatě umožňují seskupit data a funkčnost do něčeho, co může být použito jako modla pro vytváření instancí (objektů) této třídy.
JavaScript byl vytvořen jako programovací jazyk založený na prototypu, který je někdy označován jako "beztřídní", a to byla pravda pro několik prvních specifikací jazyka. Třídy byly do JavaScriptu zavedeny se specifikací ES6 z roku 2015 - předtím byly k dispozici funkce a objekty, které mohly dělat v podstatě to samé jako skutečné třídy. S přidáním skutečných tříd do JavaScriptu je jazyk nyní snazší na pochopení pro vývojáře přicházející z jiných populárních programovacích jazyků, jako jsou C#, Java, C++ a mnoho dalších.
Co je třída?
Pokud jste v programování nováčci, všechna tato řeč o třídách se vám může zdát velmi abstraktní, a to rozhodně chápu. Jak bylo zmíněno, můžete třídu považovat za krabici dat a funkcionalit, často souvisejících s koncepty ze skutečného světa. Například můžeme potřebovat napsat kód pro práci s konceptem psa. Mohli bychom vytvořit třídu pro reprezentaci psa, s daty o psovi (např. jméno) a metodami pro interakci s psem.
Definování třídy
Třída je definována pomocí klíčového slova "class", za nímž následuje název třídy (např. Dog) a poté takzvané tělo třídy. Tělo třídy obsahuje členy třídy, které jsou v podstatě pole a metody. Pojďme zkusit definovat třídu Dog:
class Dog
{
name;
Bark()
{
alert(this.name + " says: Woof!");
}
}
Zde deklarujeme třídu nazvanou "Dog" (Pes), s polem (name - jméno) a metodou (Bark - Štěkání). Tyto členy nám umožní ukládat data o psovi (jeho jméno) a také nechat psa představit se metodou Bark(). Ale třída sama o sobě v tomto bodě nemůže nic dělat - potřebujeme třídu skutečně použít.
Použití třídy
Prozatím se pokusme vytvořit (běžně označováno jako "instancování") objekt psa na základě třídy Dog a použít jej:
class Dog
{
name;
Bark()
{
alert(this.name + " says: Woof!");
}
}
let dog = new Dog();
dog.name = "Lassie";
dog.Bark();
Všimněte si posledních tří řádků - zde vytváříme objekt Dog (Pes) pomocí klíčového slova new a názvu naší třídy (Dog) a přiřazujeme ho proměnné nazvané "dog" (pes). Poté na druhém řádku poskytnu jméno pro psa a poté na třetím řádku zavolám metodu Bark() (Štěkání) na novém objektu (dog.Bark()), která představí Psa světu s jeho jménem a "Haf!"
Teď to skvělé na tom je, že protože jsme definovali modlu pro psa, můžeme vytvořit tolik psů, založených na této modle, kolik chceme:
let dog1 = new Dog();
dog1.name = "Lassie";
dog1.Bark();
let dog2 = new Dog();
dog2.name = "Pluto";
dog2.Bark();
let dog3 = new Dog();
dog3.name = "Scooby";
dog3.Bark();
Přístup k členům třídy
Již jsme zmínili, že třída se skládá z dat a funkčnosti, nebo konkrétněji, z polí a metod. Tyto se označují jako členové třídy, a způsob, jak k nim přistupujete, se trochu liší v závislosti na situaci. Děláme to docela často v příkladech výše, tak mi dovolte, abych se trochu více zaměřil na to, jak to dělám.
Při přístupu k členu třídy zevnitř třídy je název člena předřazen klíčovým slovem "this" (toto) následovaným tečkou, např. this.name (toto.jméno). Klíčové slovo "this" dává JavaScriptu vědět, že se odkazujete na jeden z členů třídy a umožní vám rozlišit např. mezi parametrem a polem třídy se stejným názvem. Dovolte mi ukázat vám příklad, kde tohoto využijeme:
SetDogName(name)
{
this.name = name;
}
Tento kód je skutečně platný, protože JavaScript pozná, že se v první části příkazu odkazuji na člena s názvem "name", zatímco ve druhé části příkazu (za rovnítkem) se odkazuji na parametr se stejným názvem.
Nyní, když přistupujete k členu zvenčí třídy, nemůžete použít klíčové slovo "this". Zde bude klíčové slovo "this" nahrazeno názvem objektu, který jste vytvořili, jako například dog1, dog2 a dog3 v příkladu výše, následované tečkou a názvem člena. Výjimkou z tohoto pravidla jsou statické členy - o nich si povíme v samostatném článku.
V předchozím příkladu jsme již viděli, jak přistupovat k členům třídy zvenčí třídy, když jsme volali metodu Bark() na objektech psa.
Třídy vs. objekty
Pokud jste si přečetli tento článek po přečtení kapitoly o objektech, může vás to trochu zmást, protože třídy a objekty si jsou velmi podobné a lze je použít k dosažení mnoha stejných věcí. Již jsem se tohoto tématu několikrát dotkl, ale chci to ještě jednou zdůraznit: Třídy lze považovat za šablony pro vytváření objektů.
Jinými slovy, objekt může být instancí třídy a ve většině programovacích jazyků by to byla jediná možnost, ale v JavaScriptu objekty existovaly před zavedením tříd a proto můžete objekt instanciovat na počkání, aniž by měl jakoukoli třídu jako svou šablonu.
Shrnutí
Třídy lze považovat za krabici dat a funkčnosti, často související s koncepty ze skutečného světa. V tomto článku jsem vám dal krátký úvod do konceptů tříd, s příkladem, jak může být třída definována a použita. Ukázal jsem spoustu nových konceptů, ale nebojte se, pokud jste je všechny nepochopili, protože se do detailů o nich podíváme v následujících článcích.