Co je to přepisování v JavaScriptu?

Abychom pochopili pojem převažující v JavaScriptu, pojďme nejprve přehodnotit pojem převažující jako celek.

Metoda Overriding je koncept OOP úzce spjatý s dědičností. Pokud metoda podřízené třídy přepíše metodu nadřazené třídy se stejným názvem, parametry a typem návratu, nazývá se přepisování metody. Rovněž je třeba připomenout, že se to zcela liší od konceptu přetížení metody. Metoda přetížení dochází, když existují dvě funkce se stejným názvem, ale odlišné parametry.

Nyní se pokusíme tento koncept pochopit z pohledu JavaScriptu. Víme, že JavaScript je „relativně“ ne objektově orientovaný. Má koncept Objects, který jej kvalifikuje jako objektově orientovaný, ale nemá koncept Classes. Je to v přírodě prototypické. Ano ano, slyšel jsem, jak křičíte nahlas, že můžeme v JavaScriptu deklarovat třídy, ale dovolte mi vám připomenout, že tento zápis třídy je pouze syntaktickým cukrem do základní prototypové architektury.

JavaScript tedy podporuje koncept potlačení metody. A dělá to velmi zvláštním způsobem. Koneckonců, je to nejvíce nepochopený jazyk ve světě programování. JavaScript podporuje přepisování, ale nikoli přetížení.

Poznámka - V příkladech v tomto článku bychom používali vývojovou konzolu prohlížečů. Jednoduše otevřete vývojové nástroje prohlížeče (Ctrl / Cmd + Shift + C) a v okně nástrojů pro vývojáře přejděte na kartu Konzola.

V prohlížeči Chrome to vypadá takto:

Toto je hřiště pro většinu konceptů souvisejících s JavaScriptem. Toto hřiště bychom použili v tomto článku.

Jak funguje Overriding v JavaScriptu?

V JavaScriptu dědí všechny objekty prototyp prototypu. Všechny objekty jsou instance objektu. Při každém vytvoření nového objektu tedy JavaScript automaticky definuje vlastnost _proto_ (prototyp) pro nový objekt. Když je podřízený objekt vytvořen, má znovu vlastnost _proto_ a tak dále. Když se nyní pokusíte o přístup k metodě nebo vlastnosti objektu, JavaScript nejprve zkontroluje, zda objekt tuto metodu / vlastnost má. Pokud tomu tak není, JavaScript zkontroluje, zda má _proto_ objektu danou metodu / vlastnost. Pokud ne, JavaScript zkontroluje, zda má _proto_ nadřazeného objektu danou metodu / vlastnost. Pokračuje ve vyhledávání řetězce, dokud není nalezena metoda / vlastnost nebo dokud není nalezen a prohledán _proto_ objektu. Například Date.prototype. ((Prototype)) je Object.prototype.

Nyní uvidíme řetěz vzhůru nohama. Takto funguje převažující funkce v JavaScriptu. Metoda by nadále přepisovala metodu nadřazeného objektu, i když je to metoda Object. Například můžeme dokonce přepsat základní funkce, jako je například vytvoření objektu Date.

Uvidíme to na příkladu:

new Date(); //the JavaScript Date() method
//overriding the JavaScript Date() method
function Date()(
this.date = "This method overrides the default constructor of Date class.";
);
var date2 = new Date();
console.log(date2);

Typy přepisování v JavaScriptu

V JavaScriptu nejsou definovány žádné typy potlačení. Na základě chování programovacího jazyka však můžeme říci, že přepsání metody v JavaScriptu funguje následujícím způsobem.

1) První chování

První způsob je ten, který jsme viděli výše, když jsme definovali metodu přepsání výchozího konstruktoru jazyka JavaScript JavaScriptu. Je to podobně jako třetí způsob znázorněný níže, protože všechny objekty v JavaScriptu jsou instancí prototypu objektu. To, co rozlišuje třetí chování, je použití super klíčového slova. Uvidíme více, když ukážeme třetí chování.

Podívejme se na další podobný příklad. Tentokrát bychom přepsali funkci výstrahy. Výchozí chování funkce výstrahy v JavaScriptu je zobrazit malé dialogové okno v horní části stránky se zprávou, kterou předáváme jako parametr.

Nyní, když ji přepíšeme svým vlastním kódem, výchozí výstražná funkce již nebude vyvolána.

function alert(msg) (
console.log(msg);
);
alert("This is an alert.");

2) Druhé chování

Druhým způsobem je pokus o přetížení funkcí v JavaScriptu. Pamatujte, že JavaScript nepodporuje přetížení funkcí. Takže namísto přetěžování vaší funkce by JavaScript přepsal všechny předchozí definice vaší funkce poslední.

Uvidíme to v akci.

//Calculate area of rectangle
function calculateArea(x, y)(
return x*y;
)
//Calculate area of square
function calculateArea(a)(
return a*a;
)
console.log("Area of rectangle 2x3 is : " + calculateArea(2, 3));
console.log("Area of square 5x5 is : " + calculateArea(5));

Všimněte si výsledku. JavaScript vždy volá druhou definici funkce a vrací druhou mocninu prvního parametru. Následující parametry jsou ignorovány.

3) Třetí chování

Třetí chování se projeví, když do JavaScriptu zapojíme třídy a dědičnost. Když podřízená třída zdědí metody nadřazené třídy a definuje své vlastní metody se stejným názvem, metody nadřazené třídy jsou přepsány. To není to, co bychom chtěli v reálných aplikacích. Chtěli bychom, aby byly naše metody rodičovské třídy přístupné, i když budou potlačeny metodami podřízené třídy. Takže super klíčové slovo přichází k naší záchraně. Pomocí super klíčového slova získáme přístup k metodám rodičovské třídy.

Uvidíme to v akci.

//the parent class
class Person (
greet() (
console.log("Hello. I am a person.");
);
)
//the child class
class Employee extends Person (
greet() (
super.greet(); //calling parent class method via keyword 'super'
console.log("Hello. I am an employee.");
)
)
let per = new Person(); //parent class object
let emp = new Employee(); //child class object
per.greet();
emp.greet();

Nyní se vraťte k prvnímu příkladu chování a zkuste použít super klíčové slovo. Všimli byste si, že to nefunguje. Je to proto, že když jsme v prvním příkladu vytvořili naši metodu, nerozšiřovali jsme nadřazenou třídu. Metodu jsme vytvořili v globálním rozsahu, čímž jsme potlačili všechny ostatní definice této metody.

Závěr

Přezkoumejme naše porozumění metodám převažujícím v JavaScriptu. Dozvěděli jsme se, že JavaScript podporuje přepisování, ale ne přetížení. Pokud se pokusíme přetížit metody, přepíše JavaScript všechny předchozí definice poslední. To platí i pro základní funkce!

Dále jsme viděli, jak můžeme potlačit metody v podřízených třídách a následně přistupovat k metodám nadřazené třídy podle potřeby. Toto je velmi užitečný koncept, protože nám umožňuje rozšířit funkčnost našich nadřazených tříd, a tak zlepšuje opětovnou použitelnost kódu.

Doporučené články

Toto je průvodce přepsáním v JavaScriptu. Zde diskutujeme, jak funguje přepisování v JavaScriptu a typy přepisování v JavaScriptu. Další informace naleznete také v následujícím článku -

  1. Co dokáže Javascript?
  2. Co je to JavaScript?
  3. Jak nainstalovat JavaScript
  4. Python Frameworks - co je to python framework?
  5. Úvod do Overriding v C ++
  6. Úvod do Overopiding v OOP
  7. Převažující v Javě
  8. Přetížení metody v C #
  9. Přetížení a přemostění v C #

Kategorie: