Vad överbryter i JavaScript?

För att förstå begreppet åsidosättande i JavaScript, låt oss först revidera begreppet åsidosättande i sin helhet.

Method Overriding är ett OOP-koncept som är nära sammansatt med arv. När en barnklassmetod åsidosätter föräldraklassmetoden med samma namn, parametrar och returtyp benämns den som metodöverskridande. Kom också ihåg att detta skiljer sig helt från begreppet överbelastning av metoden. Metodöverbelastning sker när det finns två funktioner med samma namn men olika parametrar.

Låt oss nu försöka förstå det här konceptet från JavaScript. Vi vet att JavaScript är "relativt" inte objektorienterat. Det har begreppet objekt som kvalificerar det till att vara objektorienterat, men det har inte begreppet klasser. Det är prototypiskt till sin natur. Ja ja, jag hör dig ropa högt att vi kan förklara klasser i JavaScript men låt mig påminna dig om att denna klassnotation bara är ett syntaktiskt socker till den underliggande prototypiska arkitekturen.

Så JavaScript stöder begreppet åsidosättande av metod. Och det gör det på väldigt konstiga sätt. Det är ju det mest missförstådda språket i programmeringsvärlden. JavaScript stöder åsidosättande, men inte överbelastning.

Obs - Genom exemplen i den här artikeln använder vi webbläsarnas utvecklarkonsol. Öppna helt enkelt webbläsarutvecklingsverktygen (Ctrl / Cmd + Shift + C) och gå till fliken Konsol i fönstret för utvecklarverktyg.

Det ser ut så här i Chrome:

Detta är lekplatsen för de flesta JavaScript-relaterade koncept. Vi skulle använda denna lekplats i hela denna artikel.

Hur fungerar åsidosättande i JavaScript?

I JavaScript ärver alla objekt från prototypen Objekt. Alla objekt är instanser av Objekt. Således, när du skapar något nytt objekt, definierar JavaScript automatiskt en _proto_ (prototyp) -egenskap för det nya objektet. När ett barnobjekt skapas har det igen en _proto_-egenskap och så vidare. När du försöker nå en metod eller en egenskap hos ett objekt kontrollerar JavaScript först om objektet har den metoden / egenskapen. Om det inte gör det, kontrollerar JavaScript om objektets _proto_ har den metoden / egenskapen. Om inte, kontrollerar JavaScript om det överordnade objektets _proto_ har den metoden / egenskapen. Det fortsätter att söka upp kedjan tills antingen metoden / egenskapen hittas eller objektets _proto_ möts och sökas. Exempelvis Date.prototype. ((Prototype)) är Object.prototype.

Se nu kedjan upp och ner. Så här fungerar allt i JavaScript. En metod skulle fortsätta att åsidosätta moderobjektets metod även om det är en metod för objekt. Till exempel kan vi till och med åsidosätta kärnfunktionen som att skapa ett Date-objekt.

Låt oss se detta med ett exempel:

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 av åsidosättande i JavaScript

Det finns inga typer av åsidosättande definierade i JavaScript. Men baserat på beteendet hos programmeringsspråket kan vi säga att metoden som åsidosätter i JavaScript fungerar på följande sätt.

1) Det första beteendet

Det första sättet är det vi såg ovan när vi definierade en metod för att åsidosätta standardkonstruktören för JavaScript. Detta är på ett sätt som liknar det tredje sättet som illustreras nedan eftersom alla objekt i JavaScript är ett exempel på objektprototypen. Det som skiljer det tredje beteendet är användningen av super-nyckelordet. Vi kommer att se mer när vi illustrerar det tredje beteendet.

Låt oss se ett annat liknande exempel. Den här gången skulle vi åsidosätta larmfunktionen. Standardbeteendet för varningsfunktionen i JavaScript är att visa en liten dialogruta överst på sidan med meddelandet som vi skickar som en parameter.

När vi nu åsidosätter den med vår egen kod kallas inte längre standardvarningsfunktionen.

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

2) Det andra beteendet

Det andra sättet är när vi försöker överbelasta funktioner i JavaScript. Kom ihåg att JavaScript inte stöder överbelastning av funktioner. I stället för att överbelasta din funktion skulle JavaScript åsidosätta alla tidigare definitioner av din funktion med den senaste.

Låt oss se detta i aktion.

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

Lägg märke till resultatet. JavaScript ringer alltid den andra definitionen av funktionen och returnerar kvadratet för den första parametern. De efterföljande parametrarna ignoreras.

3) Det tredje beteendet

Det tredje beteendet kommer in i bilden när vi involverar klasser och arv i JavaScript. När en barnklass ärver metoderna i förälderklassen och definierar sina egna metoder med samma namn, åsidosätts föräldraklassens metoder. Detta är inte vad vi vill ha i verkliga applikationer. Vi vill att våra föräldraklassmetoder ska vara tillgängliga även om de åsidosätts av barnklassmetoder. Så, super nyckelordet är vår räddning. Med supernyckelordet kan vi få tillgång till föräldraklassens metoder.

Låt oss se detta i aktion.

//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å tillbaka till det första beteendexemplet och försök använda det supernyckelordet där. Du märker att det inte fungerar. Det beror på att när vi skapade vår metod i det första exemplet utvidgade vi inte föräldraklassen. Vi skapade metoden i det globala omfånget och därmed åsidosatte alla andra definitioner av metoden.

Slutsats

Låt oss se över vår förståelse för metodöverskridande i JavaScript. Vi lärde oss att JavaScript stöder överskridande, men inte överbelastning. Om vi ​​försöker överbelasta metoder, åsidosätter JavaScript alla tidigare definitioner med den senaste. Detta gäller även för kärnfunktioner!

Därefter såg vi hur vi kan åsidosätta metoder i barnklasser och därefter få tillgång till föräldraklassmetoder efter behov. Detta är ett mycket användbart koncept eftersom det tillåter oss att utöka funktionaliteten i våra föräldraklasser och därmed förbättra kodåteranvändbarhet.

Rekommenderade artiklar

Det här är en guide till att överstyra i JavaScript. Här diskuterar vi hur fungerar överskridande i JavaScript och typer av åsidosättande i JavaScript. Du kan också titta på följande artikel för att lära dig mer -

  1. Vad Javascript kan göra?
  2. Vad är JavaScript?
  3. Hur man installerar JavaScript
  4. Python Frameworks - vad är Python Framework?
  5. Introduktion till åsidosättande i C ++
  6. Introduktion till åsidosättande i OOP
  7. Övergripande i Java
  8. Metodöverbelastning i C #
  9. Överbelastning och överbestyrning i C #

Kategori: