Přejít na hlavní obsah

Princip dědičnosti v JavaScriptu: příklady a vysvětlení

  • Vladislav Tichý
  • Postupy

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.

  1. 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".
  2. 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".
  3. 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.