JavaScript je výkonný programovací jazyk, který umožňuje vývojářům vytvářet interaktivní a dynamické webové stránky. Jedním z důležitých aspektů JavaScriptu je princip dědičnosti, který umožňuje objektům dědit vlastnosti a metody z jiných objektů.
Princip dědičnosti umožňuje vytvořit hierarchii tříd, kde každá třída dědí vlastnosti a metody své nadřazené třídy. To umožňuje programátorům efektivně používat kód a vyhnout se duplicitě. Pokud máme například třídu "pták", která má vlastnost" počet nohou "a metoda" létá", pak můžeme vytvořit podtřídu" vrabec", který zdědí tyto vlastnosti a metody.
K implementaci principu dědičnosti se v JavaScriptu používá klíčové slovo extends. K vytvoření podtřídy "Sparrow" například použijeme následující syntaxi:
class Воробей extends Птица/ дополнительный код для подкласса Воробей>
Podtřída " Vrabec "tak bude dědit vlastnosti a metody třídy"pták". Princip dědičnosti umožňuje efektivněji organizovat kód a učinit jej flexibilnějším a škálovatelnějším.
Co je princip dědičnosti v JavaScriptu?
V JavaScriptu je princip dědičnosti implementován pomocí prototypů. Každý objekt má prototyp, který definuje jeho soubor vlastností a metod. Když se obrátíte na vlastnosti a metody objektu, pokud nejsou nalezeny v samotném objektu, JavaScript je automaticky vyhledá v jeho prototypu.
Prototypy umožňují vytvořit stromovou strukturu objektů, kde každý objekt může v hierarchii zdědit vlastnosti a metody z předchozího objektu. To vám umožní zjednodušit kód, znovu použít funkce a zajistit flexibilitu při změně a rozšíření funkčnosti objektů v aplikaci.
Princip dědičnosti v JavaScriptu je jednou z klíčových vlastností jazyka, která umožňuje vytvořit objektově orientovaný kód a používat modularitu a abstrakci. V JavaScriptu však existují různé způsoby implementace dědičnosti, jako je prototypová dědičnost, klasická dědičnost pomocí konstrukčních funkcí a dědičnost založená na třídách pomocí syntaxe ES6.
Proč používat dědičnost v JavaScriptu?
1. Opětovné použití kódu:
Dědičnost umožňuje vytvořit novou třídu, která může využívat všechny funkce rodičovské třídy. Tím se zabrání duplikaci kódu a zjednoduší se jeho podpora a modifikace.
2. Rozšíření funkčnosti:
Pomocí dědičnosti je možné přidat nové vlastnosti a metody do třídy rodiče rozšířením její funkčnosti bez změny zdrojového kódu. To vám umožní vytvářet flexibilnější a škálovatelnější aplikace.
3. Hierarchie a struktura kódu:
Použití dědičnosti umožňuje uspořádat třídy do hierarchické struktury, což usnadňuje pochopení a podporu kódu. Rodičovské třídy mohou být abstraktní popisem obecných vlastností a metod pro skupinu tříd, zatímco podřízené třídy mohou být konkrétní implementace s jedinečnými vlastnostmi a metodami.
V JavaScriptu lze dědičnost implementovat pomocí prototypové dědičnosti nebo pomocí tříd a klíčových slov extends a super . V obou případech dědičnost umožňuje strukturovanější a flexibilnější kód, což usnadňuje vývoj a podporu aplikací JavaScript.
Příklady dědického principu
Princip dědičnosti v JavaScriptu umožňuje objektům dědit vlastnosti a metody z jiných objektů, což snižuje duplikaci kódu a usnadňuje jeho podporu.
Níže je několik příkladů, které ilustrují princip dědičnosti.
- Příklad 1: Máme základní objekt "figure" (Shape), který obsahuje vlastnosti a metody společné všem obrazcům. Tím, že se z něj dědíme, můžeme vytvořit konkrétní tvary, jako je "kruh" (Circle) a "obdélník" (Rectangle), které budou mít své vlastní jedinečné vlastnosti a metody, ale budou moci používat obecné vlastnosti a metody ze základního objektu "figura".
- Příklad 2: Máme základní objekt "uživatel" (User), který obsahuje vlastnosti a metody společné všem uživatelům. Díky tomu můžeme vytvářet specifické uživatele různých typů, jako je" admin "(Admin) a" uživatel s přístupovými právy "(UserWithAccess), kteří budou mít své vlastní jedinečné vlastnosti a metody, ale budou moci používat obecné vlastnosti a metody ze základního objektu"uživatel".
- Příklad 3: Máme základní zařízení transport (Transport), které obsahuje vlastnosti a metody společné pro všechny druhy dopravy. Díky tomu můžeme vytvářet konkrétní vozidla, jako je "Auto" (Car) a "kolo" (Bicycle), která budou mít své vlastní jedinečné vlastnosti a metody, ale budou moci používat obecné vlastnosti a metody ze základního předmětu "doprava".
Všechny tyto příklady ukazují, jak dědičnost umožňuje vytvářet hierarchii objektů, kde každý objekt může používat obecné vlastnosti a metody z nadřazeného objektu a přidávat své vlastní jedinečné vlastnosti a metody.
Příklad 1: dědičnost prostřednictvím prototypů
V JavaScriptu se dědičnost provádí prostřednictvím prototypů. Když vytvoříme nový objekt, zdědí vlastnosti a metody svého prototypu. Podívejme se na jednoduchý příklad, abychom tomuto mechanismu lépe porozuměli.
Máme dva objekty: rodič (prototyp) a dcera (dědic). Podřízený objekt zdědí vlastnosti a metody nadřazeného objektu.
// Создаем родительский объектvar Parent = function(name) ;// Добавляем метод в прототип родительского объектаParent.prototype.sayHello = function() ;// Создаем дочерний объект и наследуем родительский объектvar Child = function(name) ;// Устанавливаем прототип дочернего объекта равным прототипу родительского объектаChild.prototype = Object.create(Parent.prototype);// Переопределяем метод родительского объекта у дочернего объектаChild.prototype.sayHello = function() ;// Создаем экземпляр дочернего объектаvar child = new Child('Вася');// Вызываем метод дочернего объекта
Dále vytvoříme podřízený objekt ' Child`, který také přijme název jako argument konstruktoru a vyvolá Konstruktor nadřazeného objektu pomocí metody`call ()'. Poté instalujeme prototyp podřízeného objektu jako prototyp nadřazeného objektu pomocí metody ' Object.create()`. Podřízený objekt tak zdědí vlastnosti a metody nadřazeného objektu.
Příklad tedy ukazuje, jak vytvořit dědičnost prostřednictvím prototypů v JavaScriptu a předefinovat metodu nadřazeného objektu u podřízeného objektu.
Příklad 2: dědičnost prostřednictvím tříd
JavaScript umožňuje dědičnost prostřednictvím tříd pomocí klíčových slov class, extends a super .
K vytvoření nové třídy, která zdědí funkčnost jiného, se používá klíčové slovo extends . Chcete-li například vytvořit třídu Square, která zdědí funkčnost třídy Shape, můžete napsat následující kód:
class Shape getColor() >class Square extends Shape getArea() >const mySquare = new Square('red', 5);console.log(mySquare.getColor()); // Output: redconsole.log(mySquare.getArea()); // Output: 25
V uvedeném příkladu se Třída Square dědí ze třídy Shape . K tomu definice třídy Square používá klíčové slovo extends a název třídy, ze které se dědí – Shape .
Creator třídy Square vyvolá tvůrce nadřazené třídy Shape pomocí klíčového slova super . To vám umožní nastavit barvu na základě předaného argumentu a ponechat tuto barvu ve vlastnostech color třídy Square .
Metody getColor a getArea jsou také přidány do třídy Square a lze je použít k získání barvy a čtvercové plochy.
Použití dědičnosti prostřednictvím tříd umožňuje vytvářet hierarchie tříd a rozšiřovat funkčnost stávajících tříd tím, že poskytuje flexibilnější a organizovanější strukturu kódu.
Vysvětlení principu dědičnosti
V JavaScriptu je dědičnost implementována pomocí prototypů. Každý objekt v jazyce má vlastnost __proto__, která je odkazem na prototyp objektu. Když se obrátíte na vlastnost nebo metodu objektu, pokud není nalezen, vyhledávání probíhá v jeho prototypu, poté v prototypu prototypu a tak dále, dokud není nalezena správná vlastnost nebo metoda, nebo dokud není dosaženo hlavního prototypu – Object.prototype.
Chcete-li vytvořit objekt, který bude dědit vlastnosti a metody jiného objektu, musíte nainstalovat jeho prototyp (vlastnost_____) rovnající se tomuto objektu. V Ecmascriptu 2015 lze prototyp objektu jasně nastavit pomocí metody Object.create:
let parentObj = >;let childObj = Object.create(parentObj);childObj.prop; // 'value'childObj.method(); // 'Method'
ChildObj tak zdědí vlastnost prop a metodu parentobj. Pokud se childObj pokusí oslovit vlastnost nebo metodu, kterou sám nemá, hledání bude pokračovat v prototypovém objektu parentObj.
V praxi princip dědičnosti umožňuje snadno vytvářet hierarchii objektů seskupením jejich vlastností a funkčnosti do různých prototypů. To podporuje kód, který se snadněji udržuje, mění a logicky organizuje.