Hva er overstyring i JavaScript?

For å forstå begrepet overstyring i JavaScript, la oss først revidere konseptet å overstyre som en helhet.

Method Overriding er et OOPs konsept tett strengt med arv. Når en barneklasse-metode overstyrer foreldreklasse-metoden med samme navn, parametere og returtype, blir den betegnet som metoden overstyring. Husk også at dette er helt annerledes enn begrepet metodebelastning. Overbelastning av metoden oppstår når det er to funksjoner med samme navn, men forskjellige parametere.

La oss prøve å forstå dette konseptet fra JavaScript synspunkt. Vi vet at JavaScript er "relativt" ikke objektorientert. Det har begrepet objekter som kvalifiserer det til å være objektorientert, men det har ikke begrepet klasser. Det er prototypisk i sin natur. Ja ja, jeg hører deg rope høyt at vi kan erklære klasser i JavaScript, men la meg minne deg om at denne klasseanmeldingen bare er et syntaktisk sukker til den underliggende prototypiske arkitekturen.

Så JavaScript støtter begrepet overstyring av metoden. Og det gjør det på veldig rare måter. Det er tross alt det mest misforståtte språket i programmeringsverdenen. JavaScript støtter overstyring, men ikke overbelastning.

Merk - Gjennom eksemplene i denne artikkelen bruker vi utviklerkonsollen for nettleserne. Bare åpne nettleserutviklerverktøyene (Ctrl / Cmd + Shift + C) og gå til kategorien Console i vinduet for utviklerverktøy.

Det ser slik ut i Chrome:

Dette er lekeplassen for de fleste av JavaScript-relaterte konsepter. Vi vil bruke denne lekeplassen i hele denne artikkelen.

Hvordan fungerer overstyring i JavaScript?

I JavaScript arver alle objektene fra prototypen Objekt. Alle objekter er forekomster av Objekt. Når du oppretter et nytt objekt, definerer JavaScript automatisk en _proto_ (prototype) egenskap for det nye objektet. Når et barnobjekt opprettes, har det igjen en _proto_-egenskap og så videre. Når du prøver å få tilgang til en metode eller en egenskap til et objekt, kontrollerer JavaScript først om objektet har den metoden / egenskapen. Hvis ikke, sjekker JavaScript om objektets _proto_ har den metoden / egenskapen. Hvis ikke, sjekker JavaScript om det overordnede objektets _proto_ har den metoden / egenskapen. Den fortsetter å søke opp kjeden til enten metoden / egenskapen er funnet eller _proto_ til objektet blir funnet og søkt. F.eks. Date.prototype. ((Prototype)) er Object.prototype.

Se nå kjeden opp ned. Slik fungerer overordnede i JavaScript. En metode vil fortsette å overstyre det overordnede objektets metode, selv om det er en metode for Object. For eksempel kan vi til og med overstyre kjernefunksjonaliteten som å lage et Date-objekt.

La oss se dette med et eksempel:

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

Typer å overstyre i JavaScript

Det er ingen typer overstyring definert i JavaScript. Basert på atferden til programmeringsspråket kan vi imidlertid si at metoden overstyring i JavaScript fungerer på følgende måter.

1) Den første oppførselen

Den første måten er den vi så ovenfor da vi definerte en metode for å overstyre standard Date constructor av JavaScript. Dette er på en måte som ligner på den tredje måten illustrert nedenfor fordi alle objekter i JavaScript er et eksempel på objektprototypen. Det som skiller den tredje oppførselen er bruken av super nøkkelordet. Vi vil se mer når vi illustrerer den tredje oppførselen.

La oss se et annet lignende eksempel. Denne gangen vil vi overstyre varslingsfunksjonaliteten. Standard oppførsel for varslingsfunksjonen i JavaScript er å vise en liten dialogboks på toppen av siden med meldingen vi sender som parameter.

Når vi nå overstyrer den med vår egen kode, blir ikke lenger alarmvarselfunksjonen kalt.

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

2) Den andre oppførselen

Den andre måten er når vi prøver å overbelaste funksjoner i JavaScript. Husk at JavaScript ikke støtter overbelastning av funksjoner. Så i stedet for å overbelaste funksjonen din, vil JavaScript overstyre alle tidligere definisjoner av funksjonen din med den nyeste.

La oss se dette i aksjon.

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

Legg merke til resultatet. JavaScript kaller alltid den andre definisjonen av funksjonen og returnerer kvadratet til den første parameteren. De påfølgende parametrene blir ignorert.

3) Den tredje oppførselen

Den tredje oppførselen kommer inn i bildet når vi involverer klasser og arv i JavaScript. Når en barneklasse arver metodene til foreldreklassen og definerer sine egne metoder med samme navn, overstyres foreldreklassemetodene. Dette er ikke hva vi ønsker i applikasjoner i det virkelige liv. Vi ønsker at foreldremodellets metoder skal være tilgjengelige, selv når de overstyres av metodene for barneklasser. Så, super nøkkelordet kommer oss til unnsetning. Ved hjelp av super nøkkelordet kan vi få tilgang til foreldreklasse-metodene.

La oss se dette i aksjon.

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

Gå tilbake til det første atferdseksemplet og prøv å bruke supernøkkelordet der. Du vil merke at det ikke fungerer. Dette skyldes at da vi opprettet vår metode i det første eksemplet, utvidet vi ikke foreldreklassen. Vi opprettet metoden i det globale omfanget, og tilsidesatte dermed alle andre definisjoner av metoden.

Konklusjon

La oss revidere vår forståelse av metodeoverskridelse i JavaScript. Vi lærte at JavaScript støtter overstyring, men ikke overbelastning. Hvis vi prøver å overbelaste metoder, overstyrer JavaScript alle tidligere definisjoner av den nyeste. Dette gjelder selv for kjernefunksjoner!

Deretter så vi hvordan vi kan overstyre metoder i barneklasser og deretter få tilgang til foreldreklasse metoder når og når det er nødvendig. Dette er et veldig nyttig konsept da det lar oss utvide funksjonaliteten til foreldreklasser og dermed forbedrer gjenbruk av kode.

Anbefalte artikler

Dette er en guide til å overstyre i JavaScript. Her diskuterer vi hvordan fungerer overstyring i JavaScript og typer overstyring i JavaScript. Du kan også se på følgende artikkel for å lære mer -

  1. Hva Javascript kan gjøre?
  2. Hva er JavaScript?
  3. Slik installerer du JavaScript
  4. Python Frameworks - hva er python framework?
  5. Introduksjon til Overriding i C ++
  6. Introduksjon til overstyring i OOP
  7. Overstyrer i Java
  8. Overbelastning av metoden i C #
  9. Overbelastning og overstyring i C #