Шта је превладавање у ЈаваСцрипт-у?

Да бисмо разумели концепт прегласавања у ЈаваСцрипт-у, прво ћемо да ревидирамо концепт прегласавања као целине.

Превладавање метода је концепт ООП-а уско повезан с насљеђивањем. Када метода надређене класе надјача истоимени назив, параметре и тип повратне класе, она се назива прегласавањем методе. Такође, треба подсетити да се то потпуно разликује од концепта преоптерећења методом. Преоптерећење метода настаје када постоје две функције истог назива, али различитих параметара.

Сада покушајмо да разумемо овај концепт са становишта ЈаваСцрипта. Знамо да је ЈаваСцрипт „релативно“ не оријентисан на објекте. Има концепт Објекта који га квалификује за објектно оријентисан, али нема концепт Класе. Она је прототипске природе. Да да, чујем како гласно вичете да можемо да прогласимо класе ЈаваСцрипт-ом, али подсетим вас да је ова Класа нотација само синтактички шећер темељној прототипској архитектури.

Дакле, ЈаваСцрипт подржава концепт прегласавања метода. И то ради на врло чудне начине. Уосталом, то је најнеразумеванији језик у свету програмирања. ЈаваСцрипт подржава прегласавање, али не преоптерећење.

Напомена - Кроз примере у овом чланку користили бисмо конзолу за прегледаче прегледача. Једноставно отворите алатке за развојне програмере прегледача (Цтрл / Цмд + Схифт + Ц) и идите на картицу Конзола у прозору алата за програмере.

У Цхроме-у изгледа овако:

Ово је игралиште за већину концепата повезаних са ЈаваСцрипт-ом. Ми ћемо користити ово игралиште у овом чланку.

Како Оверридинг функционише у ЈаваСцрипт-у?

У ЈаваСцрипт-у сви објекти наслеђују од прототипа Објекта. Сви објекти су случајеви Објекта. Стога, кад год креирате било који нови објект, ЈаваСцрипт аутоматски дефинира својство _прото_ (прототип) за нови објект. Када се створи дечији објект, он опет има својство _прото_ и тако даље. Сада, када покушате да приступите методу или својству објекта, ЈаваСцрипт прво проверава да ли објект има тај метод / својство. Ако се то не догоди, ЈаваСцрипт проверава да ли _прото_ објекта има тај метод / својство. Ако није, ЈаваСцрипт провјерава да ли _прото_ надређеног објекта има тај метод / својство. Наставља претрагу ланца све док се не нађе или пронађе метода / својство или се не пронађе _прото_ објекта. Нпр. Дате.прототипе. ((Прототип)) је Објецт.прототипе.

Сада погледајте ланац наглавачке. Овако функционирање превладавања у ЈаваСцрипт-у. Метода ће и даље надјачавати методу надређеног објекта чак и ако је то метода Објекта. На пример, можемо чак и надјачати основну функционалност као што је креирање објекта Датум.

Да видимо ово на примеру:

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

Врсте прегласавања у ЈаваСцрипт-у

У ЈаваСцрипт-у нису дефинисане врсте прегласавања. Међутим, на основу понашања програмског језика, можемо рећи да метода прегласавања у ЈаваСцрипт делује на следеће начине.

1) Прво понашање

Први начин је онај који смо видели горе када смо дефинисали метод за надјачавање заданог конструктора Дате у ЈаваСцрипт. Ово је на сличан начин приказан на трећем путу доле, јер су сви објекти у ЈаваСцрипт-у примера прототипа Објекта. Оно што разликује треће понашање је употреба супер кључне речи. Видећемо више када илуструјемо треће понашање.

Погледајмо још један сличан пример. Овог пута, ми бисмо надјачали функционалност упозорења. Подразумевано понашање функције упозоравања у ЈаваСцрипт-у је да се прикаже мали дијалошки оквир на врху странице са поруком коју преносимо као параметар.

Сада, када га надјачамо са сопственим кодом, подразумевана функција упозоравања више се не позива.

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

2) Друго понашање

Други начин је када покушавамо преоптеретити функције у ЈаваСцрипт-у. Запамтите, ЈаваСцрипт не подржава функцију преоптерећења. Дакле, уместо да преоптерети вашу функцију, ЈаваСцрипт би надјачао све претходне дефиниције ваше функције са најновијом.

Да видимо ово на делу.

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

Примјетите резултат. ЈаваСцрипт увек позива другу дефиницију функције и враћа квадрат првог параметра. Следећи параметри се игноришу.

3) Треће понашање

Треће понашање долази у слику када укључимо часове и насљеђивање у ЈаваСцрипт-у. Када дечја класа наследи методе родитељске класе и дефинише сопствене методе са истим именом, надређени методи класе се поништавају. То није оно што бисмо желели у стварним апликацијама. Желели бисмо да методе наше родитељске класе буду доступне чак и када их прегласавају методе дечије класе. Дакле, супер кључне речи нам помажу. Помоћу супер кључне речи можемо приступити методама родитељске класе.

Да видимо ово на делу.

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

Сада се вратите на први пример понашања и покушајте тамо да користите супер кључну реч. Примијетили бисте да то не ради. То је зато што када смо креирали нашу методу у првом примеру, нисмо проширили родитељску класу. Направили смо метод у глобалном обиму и надјачали све остале дефиниције методе.

Закључак

Дозволите да ревидирамо наше разумевање начина надјачавања ЈаваСцрипт-а. Сазнали смо да ЈаваСцрипт подржава прегласавање, али не преоптерећење. Ако покушамо преоптеретити методе, ЈаваСцрипт надјачава све претходне дефиниције најновијом. То важи и за основне функције!

Затим смо видели како можемо пребрисати методе у дечјим разредима и накнадно приступити методама родитељске класе, када и када је то потребно. Ово је врло користан концепт јер нам омогућава да проширимо функционалност наших родитељских класа и на тај начин побољшавамо поновну употребу кода.

Препоручени чланци

Ово је водич за прегласавање ЈаваСцрипта. Овде смо расправљали о начину функционисања прегласавања у ЈаваСцрипт-у и Врсте прегласавања у ЈаваСцрипт-у. Такође можете погледати следећи чланак да бисте сазнали више -

  1. Шта Јавасцрипт може урадити?
  2. Шта је ЈаваСцрипт?
  3. Како инсталирати ЈаваСцрипт
  4. Питхон Фрамеворкс - шта је питхон Фрамеворк?
  5. Увод у превладавање у Ц ++
  6. Увод у превладавање у ООП-има
  7. Превладавање у Јави
  8. Метод преоптерећења у Ц #
  9. Преоптерећење и прегласавање у Ц #

Категорија: