Hvad overstyrer i JavaScript?

For at forstå begrebet tilsidesættelse i JavaScript, lad os først revidere konceptet om tilsidesættelse som helhed.

Method Overriding er et OOP-koncept, der er tæt sammenkravet med arv. Når en barneklasse-metode tilsidesætter forældreklasse-metoden med samme navn, parametre og returtype, betegnes den som metodeoverskridende. Husk også, at dette er helt anderledes end begrebet overbelastning af metoden. Overbelastning af metoden opstår, når der er to funktioner med samme navn, men forskellige parametre.

Lad os nu prøve at forstå dette koncept fra JavaScript's synspunkt. Vi ved, at JavaScript er "relativt" ikke objektorienteret. Det har begrebet objekter, der kvalificerer det til at være objektorienteret, men det har ikke begrebet klasser. Det er prototypisk. Ja ja, jeg hører dig råbe højt, at vi kan erklære klasser i JavaScript, men lad mig minde dig om, at denne klassebetegnelse kun er et syntaktisk sukker til den underliggende prototype arkitektur.

Så JavaScript understøtter ikke begrebet metodeoverskridelse. Og det gør det på meget underlige måder. Det er trods alt det mest misforståede sprog i programmeringsverdenen. JavaScript understøtter tilsidesættelse, men ikke overbelastning.

Bemærk - I eksemplerne i denne artikel bruger vi browsernes udviklerkonsol. Åbn blot browserudviklerværktøjer (Ctrl / Cmd + Shift + C) og gå til fanen Console i vinduet med udviklerværktøjer.

Det ser sådan ud i Chrome:

Dette er legepladsen for de fleste af JavaScript-relaterede koncepter. Vi bruger denne legeplads i hele denne artikel.

Hvordan fungerer tilsidesættelse i JavaScript?

I JavaScript arver alle objekter fra objektprototypen. Alle objekter er forekomster af Objekt. Hver gang du opretter et nyt objekt, definerer JavaScript automatisk en _proto_ (prototype) egenskab for det nye objekt. Når der oprettes et underordnet objekt, har det igen en _proto_-egenskab og så videre. Når du prøver at få adgang til en metode eller en egenskab for et objekt, kontrollerer JavaScript først, om objektet har denne metode / egenskab. Hvis det ikke gør det, kontrollerer JavaScript, om objektets _proto_ har denne metode / egenskab. Hvis ikke, kontrollerer JavaScript, om dens overordnede objekt _proto_ har denne metode / egenskab. Det fortsætter med at søge op i kæden, indtil enten metoden / egenskaben findes, eller objektets _proto_ findes og søges. F.eks. Date.prototype. ((Prototype)) er Object.prototype.

Se nu kæden på hovedet. Sådan fungerer altoverskridende i JavaScript. En metode vil fortsætte med at tilsidesætte det overordnede objektets metode, selvom det er en metode til objekt. For eksempel kan vi endda tilsidesætte kernefunktionaliteten, såsom at oprette et Date-objekt.

Lad os 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 af tilsidesættelse i JavaScript

Der er ingen typer af tilsidesættelse defineret i JavaScript. Baseret på programmeringssprogets adfærd kan vi imidlertid sige, at metodeoverskridelse i JavaScript fungerer på følgende måder.

1) Den første adfærd

Den første måde er den, vi så ovenfor, da vi definerede en metode til at tilsidesætte standardkonstruktøren til JavaScript. Dette er på en måde, der ligner den tredje måde, der er illustreret nedenfor, fordi alle objekter i JavaScript er et eksempel på objektprototypen. Hvad der adskiller den tredje opførsel er brugen af ​​super nøgleordet. Vi vil se mere, når vi illustrerer den tredje opførsel.

Lad os se et andet lignende eksempel. Denne gang vil vi tilsidesætte alarmeringsfunktionaliteten. Standardadfærden for alarmfunktionen i JavaScript er at vise en lille dialogboks øverst på siden med den meddelelse, vi sender som en parameter.

Nu, når vi tilsidesætter den med vores egen kode, kaldes standardvarslingsfunktionen ikke længere.

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

2) Den anden adfærd

Den anden måde er, når vi forsøger at overbelaste funktioner i JavaScript. Husk, JavaScript understøtter ikke overbelastning af funktioner. Så i stedet for at overbelaste din funktion, vil JavaScript tilsidesætte alle tidligere definitioner af din funktion med den nyeste.

Lad os se dette i handling.

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

Bemærk resultatet. JavaScript kalder altid den anden definition af funktionen og returnerer kvadratet for den første parameter. De efterfølgende parametre ignoreres.

3) Den tredje adfærd

Den tredje opførsel kommer ind i billedet, når vi involverer klasser og arv i JavaScript. Når en barneklasse arver metoderne i forældreklassen og definerer sine egne metoder med samme navn, tilsidesættes moderklassens metoder. Dette er ikke, hvad vi ønsker i applikationer i det virkelige liv. Vi ønsker, at vores forældreklasse-metoder skal være tilgængelige, selv når de tilsidesættes af metodeklassemetoder. Så det supernøgleord redder os. Ved hjælp af super nøgleordet kan vi få adgang til overordnede klassemetoder.

Lad os se dette i handling.

//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å nu tilbage til det første adfærdseksempel og prøv at bruge det super nøgleord der. Du vil bemærke, at det ikke fungerer. Dette skyldes, at da vi oprettede vores metode i det første eksempel, udvidede vi ikke forældreklassen. Vi skabte metoden i det globale omfang og tilsidesatte således alle andre definitioner af metoden.

Konklusion

Lad os revidere vores forståelse af metodeoverskridelse i JavaScript. Vi lærte, at JavaScript understøtter tilsidesættelse, men ikke overbelastning. Hvis vi forsøger at overbelaste metoder, tilsidesætter JavaScript alle tidligere definitioner med den nyeste. Dette gælder også for kernefunktioner!

Derefter så vi, hvordan vi kan tilsidesætte metoder i børneklasser og efterfølgende få adgang til forældremodusmetoder, når og når det kræves. Dette er et meget nyttigt koncept, da det giver os mulighed for at udvide funktionaliteten i vores overordnede klasser og dermed forbedre kodens genanvendelighed.

Anbefalede artikler

Dette er en guide til tilsidesættelse i JavaScript. Her diskuterer vi, hvordan fungerer tilsidesættelse i JavaScript og typer af tilsidesættelse i JavaScript. Du kan også se på den følgende artikel for at lære mere -

  1. Hvad Javascript kan gøre?
  2. Hvad er JavaScript?
  3. Sådan installeres JavaScript
  4. Python Frameworks - hvad er python framework?
  5. Introduktion til tilsidesættelse i C ++
  6. Introduktion til tilsidesættelse i OOP'er
  7. Overstyring i Java
  8. Metodeoverbelastning i C #
  9. Overbelastning og tilsidesættelse i C #

Kategori: