TOC

This article has been localized into Czech by the community.

Třídy:

Metody

Jak jsme již dříve viděli v tomto tutoriálu, běžné funkce mohou existovat v globálním rozsahu a mohou být přístupné odkudkoli, zatímco metoda je funkce deklarovaná na třídě a přístupná buď přímo na třídě, nebo na instanci třídy. Jinými slovy, metoda je jen funkce, která patří třídě.

V předchozím článku jsme se zabývali poli tříd, která jsou kontejnery používané třídou pro ukládání dat. Metody jsou zde, aby poskytovaly skutečnou funkčnost třídy, a i když často interagují s poli, mohou také fungovat bez použití jakýchkoli polí.

Již jsme viděli příklad toho, jak by metoda mohla vypadat v úvodním článku této kapitoly o třídách, ale nyní je čas proniknout trochu hlouběji. Především si ujasněme, jak je metoda třídy definována:

class Dog
{
	Bark()
	{
		
	}
}

Zde máme jednoduchou třídu nazvanou Dog (Pes), s jednoduchou funkcí nazvanou Bark() (Štěkání). Pokud jste si o běžných funkcích přečetli jinde v tomto tutoriálu, všimnete si, že třídy nepoužívají klíčové slovo function k označení funkce. Místo toho bude interpret JavaScriptu vědět, že jde o funkci kvůli závorkám a následujícím složeným závorkám.

Uvnitř závorek můžete mít nula nebo více parametrů, takto:

class Dog
{
	Bark(param1, param2)
	{
		
	}
}

A uvnitř složených závorek je místo, kde umístíte skutečný kód (tělo) funkce, takto:

class Dog
{
	Bark(sound)
	{
		alert("The dog says: " + sound);
	}
}

S tímto pojďme zkusit vytvořit nového psa a zavolat metodu třídy Bark() (Štěkání):

class Dog
{
	Bark(sound)
	{
		alert("The dog says: " + sound);
	}
}

let dog = new Dog();
dog.Bark("Woof!");

O funkcích je toho k poznání mnohem více, ale nejsou specifické pro třídy, takže pokud jste ještě nečetli kapitolu o funkcích v našem tutoriálu, doporučuji to udělat nyní. Zvláště články o parametrech funkcí jsou velmi relevantní.

Konstruktor

Něco, co je skutečně specifické pro třídy, je speciální typ funkce nazvaný konstruktor. Pokud třída definuje konstruktor, tato speciální metoda je automaticky volána při instancování třídy, což umožňuje třídě inicializovat pole atd. Konstruktor je definován použitím klíčového slova constructor na místě, kde by se obvykle objevil název funkce, takto:

class Dog
{
	constructor()
	{
	
	}
}

A stejně jako u běžné funkce, můžete určit jeden nebo více parametrů, pokud je to potřeba. Tyto parametry mohou být předány třídě při vytváření objektu založeného na třídě. Dovolte mi vám ukázat kompletní příklad:

class Dog
{
	name;
	age;
	
	constructor(name, age)
	{
		this.name = name;
		this.age = age;
	}
	
	Describe()
	{
		return this.name + " is " + this.age + " years old";
	}
}

let dog = new Dog("Dog Doe", 7);
alert(dog.Describe());

Všimněte si, jak používáme konstruktor k nastavení hodnot pro naše dvě pole, name (jméno) a age (věk). Tyto hodnoty předáváme při vytváření objektu psa, a později jsou používány metodou Describe() (Popis).

Soukromé metody

V předchozím článku jsme diskutovali o konceptu soukromých polí a soukromých členů obecně. Pokud chcete vědět více o konceptu soukromých členů, vraťte se zpět a přečtěte si článek o soukromých polích.

Prozatím chci jen zmínit, že do třídy lze přidat soukromou metodu, čímž se zabrání jejímu volání zvenčí třídy. Chcete-li metodu označit za soukromou, předřaďte před její název znak mřížky. Zde je příklad jejího použití:

class Dog
{
	name;
	age;
	
	constructor(name, age)
	{
		this.name = name;
		this.age = age;
	}
	
	#getDogDescription()
	{
		return this.name + " is " + this.age + " years old";
	}
	
	Describe()
	{
		return this.#getDogDescription();
	}
}

let dog = new Dog("Dog Doe", 7);
alert(dog.Describe());

V tomto příkladu jsem vytvořil soukromou metodu nazvanou #getDogDescription() (ZískejPopisPsa). Všimněte si znaku mřížky na začátku názvu - to sdělí interpretu JavaScriptu, že tato metoda je soukromá a měla by být přístupná pouze zevnitř třídy. Poté vystavíme veřejnou metodu nazvanou Describe() (Popis), která interně pouze volá metodu #getDogDescription().

Pokud to chcete otestovat, zkuste změnit poslední řádek tak, aby místo toho používal soukromou metodu, takto:

alert(dog.#getDogDescription());

Okamžitě narazíte na chybu podobnou této:

Uncaught SyntaxError: Private field '#getDogDescription' must be declared in an enclosing class

Shrnutí

Metoda je pouze funkce definovaná na třídě. Můžeme použít metody tříd k přidání funkcionalit třídě a stejně jako u běžných funkcí JavaScriptu může metoda třídy definovat jeden nebo více parametrů, které slouží k poskytnutí informací metodě. Pokud jste si ještě nepřečetli kapitolu o funkcích, doporučuji to udělat nyní, protože sdílejí mnoho důležitých funkcionalit s metodami tříd.


This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!