Mis on JavaScriptis ülimuslik?

JavaScripti ületamise kontseptsiooni mõistmiseks vaatame kõigepealt üle üldise ületamise kontseptsiooni.

Meetodi alistamine on OOP-ide kontseptsioon, mis on tihedalt seotud pärimisega. Kui lasteklassi meetod alistab sama nime, parameetrite ja tagastamise tüübi vanema klassi meetodi, nimetatakse seda meetodi ülimuslikuks. Samuti tuleb meelde tuletada, et see erineb täielikult meetodi ülekoormamise kontseptsioonist. Meetodi ülekoormamine toimub siis, kui on kaks sama nimega, kuid erinevate parameetritega funktsiooni.

Proovime nüüd seda mõistet JavaScripti vaatenurgast mõista. Me teame, et JavaScript on “suhteliselt” mitte objektorienteeritud. Sellel on küll objektide kontseptsioon, mis kvalifitseerib seda objektorienteeritud, kuid sellel puudub klasside mõiste. Oma olemuselt on see prototüüpne. Jah, jah, ma kuulen teid karjuvat valjult, et võime klassid JavaScripti kuulutada, kuid lubage mul teile meelde tuletada, et see klassi märge on vaid süntaktiline suhkur aluseks oleva prototüüpse arhitektuuri jaoks.

Niisiis, JavaScript toetab põhimõtteliselt meetodi kontseptsiooni. Ja ta teeb seda väga kummalistel viisidel. Lõppude lõpuks on see programmeerimismaailmas kõige rohkem valesti mõistetud keel. JavaScript toetab ülekaalu, kuid mitte ülekoormamist.

Märkus. Kõigis selle artikli näidetes kasutaksime brauserite arendajakonsooli. Lihtsalt avage brauseri arendaja tööriistad (Ctrl / Cmd + Shift + C) ja minge arendaja tööriistade aknas vahekaardile Konsool.

See näeb Chrome'is välja selline:

See on enamiku JavaScriptiga seotud mõistete mänguväljak. Me kasutaksime seda mänguvälja kogu selle artikli vältel.

Kuidas ülekaal toimib JavaScriptis?

JavaScriptis pärivad kõik objektid prototüübi. Kõik objektid on objekti eksemplarid. Seega määratleb JavaScript iga uue objekti loomisel uue objekti jaoks automaatselt _proto_ (prototüübi) atribuudi. Lapseobjekti loomisel on sellel jälle omadus _proto_ ja nii edasi. Kui proovite pääseda juurde meetodile või objekti atribuudile, kontrollib JavaScript kõigepealt, kas objektil on see meetod / atribuut. Kui ei, kontrollib JavaScript, kas objekti _proto_-l on see meetod / omadus. Kui ei, kontrollib JavaScript, kas selle emaobjekti _proto_-l on see meetod / omadus. See jätkab otsimist ahelast ülespoole, kuni meetod / omadus on leitud või objekti _proto_ on leitud ja otsitud. Nt kuupäev.prototüüp. ((Prototüüp)) on objekt.prototüüp.

Nüüd vaata ketti tagurpidi. Nii toimib ülekirjutamine JavaScriptis. Meetod jätkab põhiobjekti meetodi alistamist, isegi kui see on objekti objekt. Näiteks võime isegi tühistada põhifunktsioonid, näiteks objekti Kuupäev loomise.

Vaatame seda näitega:

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

Ülekirjutuse tüübid JavaScriptis

JavaScriptis pole määratletud ühtegi ülekaalu tüüpi. Programmeerimiskeele käitumise põhjal võime siiski öelda, et JavaScripti ülimuslik meetod toimib järgmistel viisidel.

1) Esimene käitumine

Esimene viis on see, mida nägime ülal, kui määratlesime JavaScripti vaikimisi kuupäevakonstrukatori alistamise meetodi. See sarnaneb allpool illustreeritud kolmanda viisiga, kuna kõik JavaScriptis olevad objektid on objekti prototüübi eksemplar. Kolmandat käitumist eristab supermõistuse kasutamine. Näeme enamat, kui illustreerime kolmandat käitumist.

Vaatame veel ühte sarnast näidet. Seekord alistame häirefunktsiooni. Häirefunktsiooni JavaScriptis vaikimisi käitumine on lehe ülaosas väikese dialoogiboksi kuvamine koos parameetrina edastatava sõnumiga.

Kui me selle oma koodiga alistame, siis vaikehoiatuse funktsiooni enam ei kutsuta.

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

2) Teine käitumine

Teine võimalus on siis, kui proovime funktsioone JavaScriptis üle koormata. Pidage meeles, et JavaScript ei toeta funktsioonide ülekoormamist. Seega, selle asemel, et funktsioon üle koormata, alistaks JavaScript kõik funktsiooni varasemad määratlused uuega.

Vaatame seda tegevuses.

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

Pange tähele tulemust. JavaScript kutsub funktsiooni alati teise definitsiooni ja tagastab esimese parameetri ruudu. Järgmisi parameetreid eiratakse.

3) kolmas käitumine

Kolmas käitumine kujuneb siis, kui kaasame klassid ja pärimise JavaScripti. Kui lasteklass pärib vanemklassi meetodid ja määratleb oma samanimelised meetodid, siis vanemklassi meetodid ignoreeritakse. See pole see, mida me päriselus rakendustes sooviksime. Tahaksime, et meie vanemklasside meetodid oleksid juurdepääsetavad isegi siis, kui lasteklasside meetodid on nendest tähtsamad. Niisiis, super märksõna tuleb meie appi. Super märksõna abil pääseme juurde vanema klassi meetoditele.

Vaatame seda tegevuses.

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

Nüüd minge tagasi esimese käitumisnäite juurde ja proovige kasutada seal olevat ülimärksõna. Võite märgata, et see ei tööta. Selle põhjuseks on asjaolu, et kui me oma näites oma meetodi lõime, ei pikendanud me vanemklassi. Lõime meetodi globaalses ulatuses, ületades seega meetodi kõik muud määratlused.

Järeldus

Vaadakem üle meie arusaam JavaScripti ülimuslikest meetoditest. Saime teada, et JavaScript toetab küll ülekaalu, kuid mitte ülekoormamist. Kui proovime meetodeid üle koormata, alistab JavaScript kõik varasemad määratlused kõige hilisemaga. See kehtib isegi põhifunktsioonide kohta!

Järgmisena nägime, kuidas saame lasteklassides olevad meetodid alistada ja seejärel pääseda vanemate klassi meetoditele vastavalt vajadusele. See on väga kasulik kontseptsioon, kuna see võimaldab meil laiendada oma vanemate klasside funktsionaalsust ja parandab seeläbi koodi korduvkasutatavust.

Soovitatavad artiklid

See on juhend JavaScripti ülekaalu saavutamiseks. Siin arutleme selle üle, kuidas ülekaalustamine JavaScriptis toimib ja ülekirjutuse tüübid JavaScriptis. Lisateabe saamiseks võite vaadata ka järgmist artiklit -

  1. Mida Javascript teha saab?
  2. Mis on JavaScript?
  3. Kuidas JavaScripti installida?
  4. Pythoni raamistikud - mis on pythoni raamistik?
  5. Sissejuhatus rakenduses C ++ alistamisele
  6. Sissejuhatus OOP-ide alistamisele
  7. Ülekaalus Java
  8. Meetodi ülekoormamine C # -s
  9. C-numbri ülekoormamine ja alistamine

Kategooria: