Какво е преобладаващо в JavaScript?

За да разберем концепцията за отменяне в JavaScript, нека първо да преразгледаме концепцията за преодоляване като цяло.

Метод Overriding е концепция за OOP, тясно свързана с наследяване. Когато методът на дочерния клас отменя метода на родителския клас със същото име, параметри и тип връщане, той се нарича като метод за отмяна. Също така трябва да се напомни, че това е напълно различно от концепцията за претоварване на метода. Претоварването на метода възниква, когато има две функции с едно и също име, но различни параметри.

Сега, нека се опитаме да разберем тази концепция от гледна точка на JavaScript. Знаем, че JavaScript е „относително“, а не обектно ориентиран. Той има концепцията на обектите, което го определя като обектно-ориентирано, но няма понятието класове. Той е прототипичен по природа. Да да, чувам ви да крещяте силно, че можем да декларираме класове в JavaScript, но нека ви напомня, че тази нотация от клас е просто синтактична захар към основната прототипична архитектура.

И така, JavaScript поддържа концепцията за отмяна на метода. И го прави по много странни начини. В крайна сметка това е най-неразбраният език в света на програмирането. JavaScript поддържа преодоляване, но не претоварване.

Забележка - В примерите в тази статия ще използваме конзолата за програмисти на браузърите. Просто отворете инструментите за разработчици на браузъра (Ctrl / Cmd + Shift + C) и отидете на раздела Конзола в прозореца с инструменти за програмисти.

Изглежда така в Chrome:

Това е площадката за повечето от концепциите, свързани с JavaScript. Ще използваме тази детска площадка в цялата тази статия.

Как работи Overriding в JavaScript?

В JavaScript всички обекти наследяват от прототипа на Object. Всички обекти са екземпляри на Object. По този начин, всеки път, когато създавате нов обект, JavaScript автоматично дефинира свойство _proto_ (прототип) за новия обект. Когато се създаде детски обект, той отново има свойство _proto_ и така нататък. Сега, когато се опитвате да получите достъп до метод или свойство на обект, JavaScript първо проверява дали обектът има този метод / свойство. Ако не е, JavaScript проверява дали _proto_ на обекта има този метод / свойство. Ако не, JavaScript проверява дали _proto_ на родителския му обект има този метод / свойство. Той продължава да търси нагоре по веригата, докато не бъде намерен или методът / свойството или се срещне и потърси _proto_ на Object. Например Date.prototype. ((Prototype)) е Object.prototype.

Сега вижте веригата с главата надолу. Ето как превъзходството работи в JavaScript. Методът ще продължи да отменя метода на родителския обект, дори ако това е метод на Object. Например, можем дори да отменим основната функционалност, като например създаване на обект Дата.

Нека видим това с пример:

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

Видове завишаване в JavaScript

В JavaScript не са дефинирани типове отменяне. Въпреки това, въз основа на поведението на езика за програмиране, можем да кажем, че методът за отмяна на JavaScript работи по следните начини.

1) Първото поведение

Първият начин е този, който видяхме по-горе, когато дефинирахме метод за отмяна на конструктора по подразбиране Date на JavaScript. Това е по начин, подобен на третия начин, илюстриран по-долу, защото всички обекти в JavaScript са екземпляр от прототипа на Object. Това, което отличава третото поведение, е използването на ключовата дума супер. Ще видим повече, когато илюстрираме третото поведение.

Нека видим още един подобен пример. Този път бихме отменили функцията за предупреждение. Поведението по подразбиране на функцията за предупреждение в JavaScript е да се покаже малък диалогов прозорец в горната част на страницата със съобщението, което предаваме като параметър.

Сега, когато го заменим със собствен код, функцията за предупреждение по подразбиране вече не се извиква.

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

2) Второто поведение

Вторият начин е, когато се опитаме да претоварим функциите в JavaScript. Не забравяйте, че JavaScript не поддържа функция за претоварване. Така че, вместо да претоварвате вашата функция, JavaScript ще отмени всички предишни дефиниции на вашата функция с най-новата.

Нека видим това в действие.

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

Забележете резултата. JavaScript винаги извиква второто определение на функцията и връща квадрата на първия параметър. Следващите параметри се игнорират.

3) Третото поведение

Третото поведение влиза в картината, когато включваме класове и наследяване в JavaScript. Когато даден клас наследява методите на родителския клас и дефинира собствените си методи със същото име, методите на родителския клас се презаписват. Това не е, което бихме искали в приложенията в реалния живот. Бихме искали методите на нашите родителски класове да са достъпни, дори когато са отменени от методите на децата от клас. И така, супер ключовата дума ни помага. С помощта на ключовата дума супер можем да получим достъп до методите на родителския клас.

Нека видим това в действие.

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

Сега се върнете към първия пример за поведение и опитайте да използвате супер ключовата дума там. Ще забележите, че не работи. Това е така, защото когато създадохме нашия метод в първия пример, не разширихме родителския клас. Създадохме метода в глобалния обхват, като по този начин отменихме всички останали дефиниции на метода.

заключение

Нека преразгледаме нашето разбиране за метода, който е отменен в JavaScript. Научихме, че JavaScript поддържа преодоляване, но не претоварване. Ако се опитаме да претоварим методите, JavaScript отменя всички предишни дефиниции от най-новото. Това важи дори за основните функции!

След това видяхме как можем да отменяме методите в детските класове и впоследствие да получим достъп до методите на родителски клас, както и когато е необходимо. Това е много полезна концепция, тъй като ни позволява да разширим функционалността на нашите родителски класове и по този начин подобрява повторното използване на кода.

Препоръчителни статии

Това е ръководство за преодоляване на JavaScript. Тук обсъждаме как действа преодоляването в JavaScript и Видовете заменяне в JavaScript. Можете също да разгледате следната статия, за да научите повече -

  1. Какво може да направи Javascript?
  2. Какво е JavaScript?
  3. Как да инсталирате JavaScript
  4. Python Frameworks - какво е python Framework?
  5. Въведение в преодоляването на C ++
  6. Въведение в OOPs
  7. По-важно в Java
  8. Метод Претоварване в C #
  9. Претоварване и отмяна в C #