Što je prevladavanje u JavaScript-u?

Da bismo razumjeli koncept prevladavanja u JavaScript-u, prvo ćemo revidirati koncept prevladavanja kao cjeline.

Prevladavanje metoda je koncept OOP-a usko povezan s nasljeđivanjem. Kad nadređena metoda klase nadjača nadređenu metodu istog naziva, parametara i vrste povratka, to se naziva preglasavanjem metode. Također, treba podsjetiti da se to potpuno razlikuje od koncepta preopterećenja metodom. Preopterećenje metode događa se kada postoje dvije funkcije istog naziva, ali različitih parametara.

Pokušajmo razumjeti ovaj koncept s gledišta JavaScripta. Znamo da je JavaScript "relativno" ne orijentiran na objekte. Ima koncept Objekta što ga kvalificira za objektno orijentirano, ali nema koncept Klase. U prirodi je prototipske prirode. Da da, čujem kako glasno vičete da klase možemo proglasiti JavaScriptom, ali podsjetim vas da je ova Klasa oznaka samo sintaktički šećer temeljnoj prototipskoj arhitekturi.

Dakle, JavaScript podržava koncept prevladavanja metoda. I to čini na vrlo čudne načine. Uostalom, to je najviše pogrešno shvaćen jezik u programskom svijetu. JavaScript podržava prevladavanje, ali ne preopterećenje.

Napomena - Kroz primjere u ovom članku koristili bismo konzolu za razvojne programere preglednika. Jednostavno otvorite alate za razvojne programere preglednika (Ctrl / Cmd + Shift + C) i idite na karticu Konzola u prozoru alata za razvojne programere.

U Chromeu izgleda ovako:

Ovo je igralište za većinu pojmova u vezi sa JavaScriptom. Ovim ćemo se igralištem koristiti u cijelom ovom članku.

Kako Overriding funkcionira u JavaScript-u?

U JavaScript-u svi objekti nasljeđuju iz prototipa Object. Svi su predmeti primjerci Objekta. Stoga, kad god kreirate bilo koji novi objekt, JavaScript automatski definira svojstvo _proto_ (prototip) za novi objekt. Kad se stvori podređeni objekt, ono opet ima svojstvo _proto_ i tako dalje. Sada, kada pokušate pristupiti metodi ili svojstvu objekta, JavaScript prvo provjerava ima li objekt tu metodu / svojstvo. Ako se to ne dogodi, JavaScript provjerava ima li _proto_ objekta tu metodu / svojstvo. Ako nije, JavaScript provjerava ima li _proto_ nadređenog objekta tu metodu / svojstvo. Nastavlja pretraživanje gore prema lancu dok se ne nađe metoda ili svojstvo ili se ne nađe i pretraži _proto_ od Objekta. Npr. Date.prototype. ((Prototip)) je Object.prototype.

Sad lanac pogledajte naopako. Ovako funkcioniranje prevladavanja funkcionira u JavaScript-u. Metoda će i dalje nadjačavati metodu nadređenog objekta čak i ako je to metoda Objekta. Na primjer, možemo čak i nadjačati osnovnu funkcionalnost kao što je stvaranje objekta Datum.

Pogledajmo to na primjeru:

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

Vrste prevladavanja u JavaScript-u

Ne postoje vrste preklapanja definirane u JavaScript-u. Međutim, na temelju ponašanja programskog jezika, možemo reći da metoda nadjačavanja u JavaScript djeluje na sljedeće načine.

1) Prvo ponašanje

Prvi način je onaj koji smo vidjeli gore kada smo definirali metodu za nadjačavanje zadanog konstruktora datuma JavaScript. Ovo je na sličan način prikazan na trećem putu u nastavku, jer su svi objekti u JavaScript primjerci prototipa Objekta. Treće ponašanje razlikuje upotrebu super ključne riječi. Vidjet ćemo više kada ilustriramo treće ponašanje.

Pogledajmo još jedan sličan primjer. Ovaj put bismo nadjačali funkcionalnost upozorenja. Zadano ponašanje funkcije upozorenja u JavaScript-u jest prikazati mali dijaloški okvir na vrhu stranice s porukom koju prenosimo kao parametar.

Kad ga nadjačamo sa vlastitim kodom, zadana funkcija upozorenja više se ne poziva.

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

2) Drugo ponašanje

Drugi način je kada pokušavamo preopteretiti funkcije u JavaScript-u. Zapamtite, JavaScript ne podržava preopterećenje funkcije. Dakle, umjesto da preoptereti vašu funkciju, JavaScript bi nadjačao sve prethodne definicije vaše funkcije s najnovijom.

Pogledajmo to na djelu.

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

Primijetite rezultat. JavaScript uvijek poziva drugu definiciju funkcije i vraća kvadrat prvog parametra. Sljedeći parametri se zanemaruju.

3) Treće ponašanje

Treće ponašanje dolazi u obzir kada uključimo predavanja i nasljeđivanje u JavaScript-u. Kad podređena klasa nasljeđuje metode nadređene klase i definira vlastite metode s istim imenom, nadređene metode nadređene klase. To nije ono što bismo željeli u stvarnim aplikacijama. Željeli bismo da metode naše roditeljske klase budu dostupne čak i ako ih preglase metode dječje klase. Dakle, super ključna riječ nam dolazi u pomoć. Pomoću super ključne riječi možemo pristupiti metodama roditeljske klase.

Pogledajmo to na djelu.

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

Vratite se prvom primjeru ponašanja i pokušajte tamo koristiti ključnu riječ super. Primijetili biste da to ne radi. To je zato što kada smo stvorili našu metodu u prvom primjeru, nismo proširili roditeljsku klasu. Metodu smo stvorili u globalnom opsegu, nadjačavajući na taj način sve ostale definicije metode.

Zaključak

Revidirajmo naše razumijevanje metode nadjačavanja JavaScript-a. Saznali smo da JavaScript podržava prevladavanje, ali ne i preopterećenje. Ako pokušamo preopteretiti metode, JavaScript nadjačava sve prethodne definicije najnovijom. To vrijedi čak i za temeljne funkcije!

Zatim smo vidjeli kako možemo nadjačati metode u dječjim razredima i naknadno pristupiti metodama roditeljske klase ako i kada je potrebno. Ovo je vrlo koristan koncept jer nam omogućava proširiti funkcionalnost roditeljskih klasa i na taj način poboljšava ponovnu upotrebu koda.

Preporučeni članci

Ovo je vodič za preglasavanje JavaScripta. Ovdje smo raspravljali o tome kako prevladavanje funkcionira u JavaScript-u i Vrste preglasavanja u JavaScript-u. Možete pogledati i sljedeći članak da biste saznali više -

  1. Što Javascript može učiniti?
  2. Što je JavaScript?
  3. Kako instalirati JavaScript
  4. Python okviri - što je python Framework?
  5. Uvod u prevladavanje u C ++
  6. Uvod u prevladavanje u OOP-ovima
  7. Prevladavanje u Javi
  8. Preopterećenje metode u C #
  9. Preopterećenje i preglasavanje u C #

Kategorija: