Kompletní průvodce s příklady

JavaScript je multiparadigmatický jazyk, který vám umožňuje psát programy, které se řídí funkčními, objektově orientovanými a imperativními styly programování.

Pro podporu objektově orientovaných vzorů má JavaScript třídy. Protože jejich pochopení je klíčové, je tento článek průvodcem, co jsou třídy JavaScriptu a jak je používat.

Co jsou třídy v JavaScriptu?

V objektově orientovaném programování modelujeme systémy jako skupiny objektů, které se vzájemně ovlivňují. Aby objekty fungovaly, ukládají data do vlastností a provádějí akce definované jako jejich metody. Třída definuje, jaké vlastnosti a metody nesou objekty stejného typu. Třídy jsou proto plány pro objekty.

Terminologie používané ve třídách

Abychom se ujistili, že jsme na stejné stránce, zde je popis tříd s klíčovými pojmy, které budeme v tomto článku používat. Pokud jste již obeznámeni s objektově orientovaným programováním, můžete přeskočit k další části.

❇️ Třída je plán pro objekt. Poskytuje šablonu, ze které lze vytvářet objekty tohoto typu. Vytvoření objektu ze šablony poskytnuté třídou se nazývá konkretizace.

❇️ Člen třídy je cokoli, co patří do třídy. Existují dva druhy členů třídy – metody a vlastnosti.

❇️ Vlastnost je člen třídy, jehož primárním účelem je ukládat hodnoty. Mohou to být jednoduché hodnoty, jako jsou čísla a řetězce. Mohou to být také složité objekty a pole.

❇️ Některé vlastnosti jsou přístupné pouze uvnitř třídy a jsou výstižně pojmenovány jako soukromé vlastnosti. Některé jsou přístupné v rámci třídy i mimo ni. Takové vlastnosti se nazývají veřejné nemovitosti.

  8 nejlepších interaktivních tvůrců časové osy [Free & Paid]

❇️Metoda je funkce definovaná uvnitř třídy. Proto patří do třídy a má přístup k veřejným a soukromým vlastnostem. Stejně jako vlastnosti máme také veřejné metody a soukromé metody.

❇️ Existují některé metody, které poskytují rozhraní pro kód mimo třídu pro interakci s vlastnostmi uvnitř třídy. Existují dvě skupiny metod, které to dělají: getters a setters. Gettery získávají hodnoty vlastností třídy, zatímco settery nastavují hodnoty vlastností třídy.

❇️ Někteří členové jsou statičtí. To znamená, že jsou přístupné pouze ve třídě a nelze k nim přistupovat v instancích třídy.

Naproti tomu někteří členové třídy nejsou statické, což znamená, že k nim lze přistupovat pouze v instancích třídy. Než budete mít přístup k nestatickému členu, musíte vytvořit instanci třídy.

Když vytvoříte instanci třídy, zavolá se speciální metoda pro nastavení vlastností instance. Tato metoda se nazývá funkce konstruktoru.

Vysvětlení instancí třídy

Klíčové slovo new a název třídy používáme k vytvoření instance třídy v JavaScriptu. Uveďme například instanci třídy Array.

const myArr = new Array()

Vytváření tříd v JavaScriptu

Tato část se bude zabývat vytvořením třídy, která implementuje všechny koncepty, které jsme probrali v Sekce terminologie. Uděláme to na sérii příkladů, kde každý příklad navazuje na ty předchozí.

Vyhlášení prázdné třídy

K deklaraci třídy v JavaScriptu použijeme klíčové slovo class a pojmenujeme třídu. Dále definujeme tělo třídy. Tělo je uzavřeno ve složených závorkách a drží všechny členy třídy.

Zde je příklad deklarace třídy s prázdným tělem:

class Dog {

}

Nyní můžete vytvořit instanci třídy následujícím způsobem a vytisknout ji.

const pet = new Dog;
console.log(pet);

Vytváření veřejných nemovitostí

Veřejné vlastnosti jsou definovány s identifikátorem a volitelnou hodnotou.

class Dog {
    name = "Roy";
    age;
}

Zde jsme definovali jméno s hodnotou řetězce a věk bez hodnoty.

const pet = new Dog();

console.log(pet.name);
console.log(pet.age);

Definování veřejných metod

Můžeme přidat metody do naší třídy uvnitř jejího těla. Metodu definujeme stejným způsobem, jako bychom definovali funkci. Klíčové slovo function však vynecháme.

class Dog {
    name = "Roy";
    age;

    walk () {
        console.log("Walking");
    }
}

Ve výše uvedeném příkladu jsme definovali metodu chůze. Každá instance třídy Animal bude mít tuto metodu.

const pet = new Dog();
pet.walk();

Přístup k vlastnostem z metod

V JavaScriptu obecně přistupujeme k vlastnostem objektu pomocí operátoru tečka. Pokud bychom například měli objekt s názvem osoba a chtěli bychom získat přístup k vlastnosti name, udělali bychom to následovně.

person.name

Pokud však chceme přistupovat k vlastnosti z objektu, použijeme místo názvu objektu klíčové slovo this. Zde je příklad:

this.name

Klíčové slovo this odkazuje na objekt. Pokud bychom tedy chtěli přistupovat k vlastnostem třídy z metod třídy, použili bychom tuto syntaxi..

  9 nejlepších trenérů cílů FPS, aby ovládli vaše online zápasy

Vytváření soukromých vlastností

Předpokládejme, že chceme, aby vlastnosti jména a věku, které jsme definovali dříve, byly soukromé. Třídu bychom předefinovali následovně:

class Dog {
    #name = "Roy";
    #age;

    walk () {
        console.log("Walking");
    }
}

Jak vidíte, soukromé vlastnosti jsou specifikovány pomocí libry. Pokud byste se k nim pokusili dostat, narazili byste na chyby.

const dog = new Dog();

dog.#name

Vytváření metod Getter a Setter

Nyní jsou vlastnosti jména a věku třídy soukromé. Proto k nim lze přistupovat pouze metodami uvnitř třídy.

Pokud chceme kódu mimo třídu povolit přístup k těmto vlastnostem, definujeme gettry a settery. Udělejme to pro vlastnost name.

class Dog {
    #name = "Roy";
    #age;

    get name () {
        return this.#name;
    }

    set name (value) {
        this.#name = value;
    }

    walk () {
        console.log("Walking");
    }
}

S výše definovanou třídou můžete nastavit název a zobrazit jej pomocí níže uvedeného kódu:

const pet = new Dog();

// Setting the name
pet.name = "Rex";

// Getting the name
console.log(pet.name);

Vytváření soukromých metod

Stejně jako soukromé vlastnosti mají soukromé metody předponu znak libry. Proto by deklarace soukromé metody vypadala takto:

class Dog {
    #name = "Roy";
    #age;

    get name () {
        return this.#name;
    }

    set name (value) {
        this.#name = value;
    }

    #increaseAge() {
        this.#age ++;
    }

    #decreaseAge () {
        this.#age --;
    }

    walk () {
        console.log("Walking");
    }
}

Pokud byste se pokusili o přístup k těmto metodám mimo třídu, nefungovalo by to.

const pet = new Dog();
pet.#increaseAge();

Vytvoření metody konstruktoru

Můžete také definovat metodu konstruktoru. Tato metoda bude automaticky volána, kdykoli vytvoříte instanci nové třídy. K inicializaci vlastností lze použít metodu konstruktoru. V tomto příkladu budeme inicializovat věk a jméno podle jakýchkoli argumentů, které uživatel zadá během vytváření instance.

class Dog {
    #name;
    #age;

    constructor (name = "Dog", age = 0) {
        this.#name = name;
        this.#age = age;
    }

    get name () {
        return this.#name;
    }

    set name (value) {
        this.#name = value;
    }

    #increaseAge() {
        this.#age ++;
    }

    #decreaseAge () {
        this.#age --;
    }

    walk () {
        console.log("Walking");
    }
}

Když vytvoříme instanci naší třídy, můžeme zadat jméno a věk.

const pet = new Dog('Roy', 3);
console.log(pet.name);

Vytváření statických vlastností a metod

Jak bylo zmíněno, ke statickým členům lze přistupovat bez předchozího vytváření instance třídy. V níže uvedeném příkladu vytvoříme statickou vlastnost a metodu.

class Dog {
    #name;
    #age;
    static genus = "Canis";

    constructor (name = "Dog", age = 0) {
        this.#name = name;
        this.#age = age;
    }

    static bark() {
        console.log("Woof");
    }

    get name () {
        return this.#name;
    }

    set name (value) {
        this.#name = value;
    }

    #increaseAge() {
        this.#age ++;
    }

    #decreaseAge () {
        this.#age --;
    }

    walk () {
        console.log("Walking");
    }
}

Nyní můžete přistupovat ke statické vlastnosti a metodě bez vytváření instance.

console.log(Dog.genus);
Dog.bark();

Dědictví

Třídy mohou dědit vlastnosti z jiných tříd. Třída, která dědí členy z jiné třídy, se nazývá nadtřída, zatímco třída, ze které dědí členy, je základní třída nebo podtřída.

  9 nejlepších trenérů cílů FPS, aby ovládli vaše online zápasy

K vytvoření nadtřídy v JavaScriptu používáme klíčové slovo extends. Zde je příklad, kdy dědíme ze třídy Dog.

class Rottweiler extends Dog {
    constructor (name, age) {
        super(name, age);
        this.breed = 'rottweiler';
    }
}

Jak vidíte, třída je z velké části stejná jako dříve. Uvnitř konstruktoru jsme však zavolali super funkci. Klíčové slovo super odkazuje na konstruktor základní třídy. Proto jsme v naší nadtřídě zavolali konstruktor základní třídy a předali jsme jméno a věk.

const myPet = new Rottweiler();
console.log(myPet);

Závěr

V tomto článku jsme se zabývali třídami. Popsali jsme, co to jsou, členové, které mohou držet, a různé klasifikace členů. To vše jsme pak ilustrovali na příkladech.

Dále si možná budete chtít přečíst otázky k pohovoru o objektově orientovaném programování.