Čo je to prepísanie v jazyku JavaScript?

Aby sme pochopili koncepciu nadradenia v JavaScripte, najprv zrevidujme koncepciu nadradenia ako celku.

Metóda Overriding je koncept OOP úzko spojený s dedičstvom. Keď metóda podradenej triedy potlačí metódu nadradenej triedy s rovnakým názvom, parametrami a typom návratu, nazýva sa prepísanie metódy. Pripomíname tiež, že sa to úplne líši od koncepcie preťaženia metódou. Preťaženie metódy nastane, keď existujú dve funkcie s rovnakým názvom, ale s odlišnými parametrami.

Skúsme teraz pochopiť tento koncept z hľadiska JavaScriptu. Vieme, že JavaScript nie je „relatívne“ objektovo orientovaný. Má koncept Objects, ktorý ho kvalifikuje ako objektovo orientovaný, ale nemá koncept Classes. Je svojou povahou prototypom. Áno áno, počujem vás nahlas kričať, že v jazyku JavaScript môžeme deklarovať triedy, ale dovoľte mi pripomenúť, že tento zápis triedy je iba syntaktickým cukrom základnej prototypovej architektúry.

Preto JavaScript nepodporuje koncepciu potlačenia metód. A robí to veľmi zvláštnymi spôsobmi. Koniec koncov, je to najviac nepochopený jazyk vo svete programovania. JavaScript podporuje prepísanie, ale nie preťaženie.

Poznámka - V príkladoch v tomto článku by sme používali vývojovú konzolu prehľadávačov. Jednoducho otvorte vývojárske nástroje prehliadača (Ctrl / Cmd + Shift + C) a prejdite na kartu Konzola v okne nástrojov pre vývojárov.

V prehliadači Chrome to vyzerá takto:

Toto je ihrisko pre väčšinu konceptov týkajúcich sa jazyka JavaScript. Toto ihrisko by sme používali v tomto článku.

Ako funguje Overriding v JavaScripte?

V JavaScripte dedia všetky objekty prototyp prototypu. Všetky objekty sú inštanciami objektu Object. Preto vždy, keď vytvoríte akýkoľvek nový objekt, JavaScript automaticky definuje vlastnosť _proto_ (prototyp) pre nový objekt. Po vytvorení podriadeného objektu má znova vlastnosť _proto_ atď. Teraz, keď sa pokúsite získať prístup k metóde alebo vlastnosti objektu, JavaScript najskôr skontroluje, či objekt túto metódu / vlastnosť má. Ak to tak nie je, JavaScript skontroluje, či má _proto_ objektu danú metódu / vlastnosť. Ak nie, JavaScript skontroluje, či má _proto_ nadradeného objektu danú metódu / vlastnosť. Pokračuje vo vyhľadávaní reťazca, kým nie je nájdená metóda / vlastnosť alebo kým nie je nájdené a prehľadané _proto_ objektu. Napríklad Date.prototype. (Prototype) je Object.prototype.

Teraz uvidíte reťaz hore nohami. Takto funguje prepísanie v JavaScripte. Metóda by naďalej prepísala metódu nadradeného objektu, aj keď je to metóda Object. Napríklad môžeme dokonca prepísať základné funkcie, ako napríklad vytvorenie objektu Date.

Pozrime sa na tento príklad:

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 prepísania v JavaScripte

V JavaScripte nie sú definované žiadne typy nahradenia. Na základe správania sa programovacieho jazyka však môžeme povedať, že metóda prepísaná v JavaScripte funguje nasledujúcimi spôsobmi.

1) Prvé správanie

Prvý spôsob je ten, ktorý sme videli vyššie, keď sme definovali metódu na prepísanie predvoleného konštruktora dátumu JavaScriptu. Je to podobne ako tretí spôsob znázornený nižšie, pretože všetky objekty v JavaScripte sú inštanciou prototypu objektu. To, čo odlišuje tretie správanie, je použitie super kľúčového slova. Keď ukážeme tretie správanie, uvidíme viac.

Pozrime sa na ďalší podobný príklad. Tentoraz by sme prepísali funkciu výstrahy. Predvolené správanie výstražnej funkcie v JavaScripte je v hornej časti stránky zobraziť malé dialógové okno so správou, ktorú odovzdáme ako parameter.

Keď ho prepíšeme vlastným kódom, predvolená výstražná funkcia sa už nebude volať.

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

2) Druhé správanie

Druhým spôsobom je pokus o preťaženie funkcií v JavaScripte. Pamätajte, že JavaScript nepodporuje preťaženie funkcií. Takže namiesto preťaženia vašej funkcie by JavaScript prepísal všetky predchádzajúce definície vašej funkcie najnovšou.

Pozrime sa na to v akcii.

//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šimnite si výsledok. JavaScript vždy volá druhú definíciu funkcie a vráti druhú mocninu prvého parametra. Nasledujúce parametre sa ignorujú.

3) Tretie správanie

Tretie správanie sa prejaví, keď do skriptu JavaScript zapojíme triedy a dedičstvo. Keď podradená trieda zdedí metódy nadradenej triedy a definuje svoje vlastné metódy s rovnakým názvom, metódy nadradenej triedy sa prepíšu. Toto by sme v aplikáciách v reálnom živote nechceli. Chceli by sme, aby boli naše metódy rodičovskej triedy prístupné, aj keď sú potlačené metódami detskej triedy. Takže super kľúčové slovo prichádza k našej záchrane. Pomocou super kľúčového slova máme prístup k metódam rodičovskej triedy.

Pozrime sa na to v akcii.

//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();

Teraz sa vráťte k prvému príkladu správania a skúste tam použiť super kľúčové slovo. Všimli by ste si, že to nefunguje. Je to tak preto, že keď sme vytvorili náš spôsob v prvom príklade, rodičovskú triedu sme nerozšírili. Metódu sme vytvorili v globálnom rozsahu, čím sme prekonali všetky ostatné definície metódy.

záver

Pozrime sa na to, ako chápeme metódu prevažujúcu v JavaScripte. Dozvedeli sme sa, že JavaScript nepodporuje potlačenie, ale nie preťaženie. Ak sa pokúsime metódy preťažiť, JavaScript prepíše všetky predchádzajúce definície najnovšou. To platí aj pre základné funkcie!

Ďalej sme videli, ako môžeme potlačiť metódy v podradených triedach a následne pristupovať k metódam rodičovskej triedy podľa potreby. Toto je veľmi užitočný koncept, pretože nám umožňuje rozšíriť funkčnosť našich rodičovských tried a tak zlepšuje opätovné použitie kódu.

Odporúčané články

Toto je príručka na prepísanie kódu JavaScript. Tu diskutujeme o tom, ako funguje prepísanie v JavaScripte a Typy prepísania v JavaScripte. Viac informácií nájdete aj v nasledujúcom článku -

  1. Čo dokáže Javascript?
  2. Čo je to JavaScript?
  3. Ako nainštalovať JavaScript
  4. Python Frameworks - čo je to python framework?
  5. Úvod do ovládania v C ++
  6. Úvod do ovládania OOP
  7. Prevláda v Jave
  8. Metóda preťaženia v C #
  9. Preťaženie a prekonanie v C #

Kategórie: