JavaScript je etablirani jezik, ali je samo dodao podršku za klasično objektno orijentirano programiranje (OOP) u ES6. Sve dok nije dodao značajke poput deklaracija klasa, JavaScript je upravljao OOP-om koristeći manje poznatu paradigmu temeljenu na prototipu. S bilo kojim pristupom, međutim, možete stvoriti složene aplikacije koje koriste značajke temeljene na objektima.
Konstruktor u prototipskom JavaScriptu izgleda poput bilo koje druge funkcije. Glavna razlika je u tome što možete koristiti tu funkciju konstruktora za stvaranje objekata.
Što je konstruktor u JavaScriptu?
Konstruktori su jedan od temeljne koncepte u objektno orijentiranom programiranju. Konstruktor je funkcija koju možete koristiti za stvaranje instance objekta. Osim što stvara novi objekt, konstruktor specificira svojstva i ponašanja koja će mu pripadati.
Sintaksa konstruktora
funkcijaNameOfConstructor() {
this.property1 = "Svojstvo1";
this.property2 = "Svojstvo2";
this.property3 = "Svojstvo3";
}
Možete stvoriti konstruktor s
funkcija ključna riječ jer je u biti kao i svaka druga funkcija. Međutim, konstruktori se pridržavaju sljedećih konvencija:- Kako biste ih razlikovali od drugih funkcija, upotrijebite naziv svog konstruktora koji počinje velikim slovom.
- Konstruktori koriste ovaj ključna riječ drugačije. Unutar konstruktora, ovaj odnosi se na novi objekt koji će konstruktor stvoriti.
- Za razliku od JavaScript funkcija, konstruktori definiraju svojstva i ponašanja umjesto vraćanja vrijednosti.
Korištenje konstruktora za stvaranje novih objekata
U JavaScriptu korištenje konstruktora za stvaranje objekta jednostavan je zadatak. Evo jednostavnog konstruktora iza kojeg slijedi poziv:
funkcijaStudent() {
ovo.ime = "Gloria";
ovo.spol = "Žena";
ovaj.dob = 19;
}
neka studentica = novi Student();
U ovom primjeru, studentica je objekt stvoren od Student konstruktor. Koristiti novi ključna riječ za pozivanje funkcije kao konstruktora. Ova ključna riječ govori JavaScriptu da stvori novu instancu Student. Ne biste trebali pozivati ovu funkciju bez novi ključna riječ jer ovaj unutar konstruktora neće ukazivati na novi objekt. Nakon izgradnje, studentica ima sva svojstva Student. Možete pristupiti tim svojstvima i mijenjati ih kao što biste to učinili s bilo kojim drugim objektom.
Važne stvari koje treba znati o JavaScript konstruktorima
Rad s konstruktorima može biti jako naporan, au isto vrijeme može biti lagan zadatak. Evo nekoliko važnih stvari koje bi svaki programer trebao znati o radu s konstruktorima.
Korištenje konstruktora s argumentima
Možete proširiti konstruktor za primanje argumenata. Ovo je vrlo važno ako želite pisati odgovarajući, fleksibilni kod.
Kad god kreirate objekt iz konstruktora, objekt će naslijediti sva svojstva deklarirana u konstruktoru. Na primjer, studentica koje ste stvorili gore imat će svojstva Ime, spol, i dob s fiksnim početnim vrijednostima. Iako svako svojstvo možete promijeniti ručno, bilo bi puno posla ako biste pisali program koristeći mnogo objekata.
Srećom, JavaScript konstruktori mogu prihvatiti parametre, kao i svaka druga funkcija. Možete promijeniti Student konstruktor za prihvaćanje dva parametra:
funkcijaStudent(ime, spol) {
ovaj.name = ime;
ovaj.gender = rod;
ovaj.dob = 19;
}
Svi objekti stvoreni od gore navedenog imat će dob postavljen 19. Svoj konstruktor možete dizajnirati na ovaj način ako postoji svojstvo koje želite da svi objekti imaju.
Sada možete definirati jedinstvene objekte iz istog konstruktora prosljeđivanjem različitih argumenata.
Argumenti čine konstruktore fleksibilnijima. Štede vrijeme i potiču čisti kod.
Definiranje metoda objekta
Metoda je svojstvo objekta koje je funkcija. Metode poboljšavaju vaš kod u OOP-u jer dodaju različita ponašanja vašim objektima. Evo primjera:
funkcijaStudent(ime, spol) {
ovaj.name = ime;
ovaj.gender = rod;
ovaj.dob = 19 ;
ovaj.sayName = funkcija () {
povratak`Zovem se ${name}`;
}
}
Gore navedeno dodaje funkciju reciName konstruktoru.
Pretpostavimo da koristite ovaj konstruktor za stvaranje objekta koji pohranjujete u varijablu, studentica. Zatim možete pozvati ovu funkciju s kodom u nastavku:
studentica.reciteIme()
Prototip
Ranije smo stvarali Student na način da će sve njegove instance imati dob nekretnina u vrijednosti od 19. To će rezultirati dupliciranom varijablom za svaku Student instancu koju stvorite.
Kako bi se izbjeglo ovo dupliciranje, JavaScript koristi koncept prototipova. Svi objekti stvoreni iz konstruktora dijele svojstva njegovog prototipa. Možete dodati dob vlasništvo na Student prototip kao što je prikazano u nastavku:
Student.prototype.age = 19;
Čineći to, sve instance od Student imat će dob vlasništvo. Deklariranje svojstva prototipa je način za smanjenje duplikata koda u vašoj aplikaciji. To čini vaš kod što je moguće standardnijim.
Svojstvo prototipa može biti objekt
Svojstva prototipa možete dodati pojedinačno kao što je gore objašnjeno. Ali ako morate dodati mnogo svojstava, to može biti nezgodno.
Kao alternativu, možete sadržavati sva svojstva koja su vam potrebna u novom objektu. Time ćete postaviti sva svojstva odjednom. Na primjer:
Student.prototype = {
dob: 19,
utrka: "Bijela",
invaliditet: "Nijedan"
}
Ne zaboravite postaviti konstruktor svojstvo prilikom postavljanja prototipova na novi objekt.
Student.prototype = {
konstruktor: student,
dob: 19,
utrka: "Bijela",
invaliditet: "Nijedan"
}
Ovo svojstvo možete koristiti da provjerite koja je funkcija konstruktora stvorila instancu.
Supertipovi i nasljeđivanje
Nasljedstvo je metoda koju programeri koriste kako bi smanjili pogreške u svojim aplikacijama. To je način pridržavanja Ne ponavljaj se (SUHO) načelo.
Pretpostavimo da imate dva konstruktora—Student i Učitelj, nastavnik, profesor— koji imaju dva slična svojstva prototipa.
Student.prototype = {
konstruktor: student,reciName: funkcija () {
povratak`Zovem se ${name}`;
}
}Teacher.prototype = {
konstruktor: Učitelj, nastavnik, profesor,
reciName: funkcija () {
povratak`Zovem se ${name}`;
}
}
Oba ova konstruktora definiraju reciName metoda, identično. Kako biste izbjegli ovo nepotrebno dupliciranje, možete stvoriti supertip.
funkcijaIndividualDetails(){};
IndividualDetails.prototype = {
konstruktor: Pojedinačni detalji,
reciName: funkcija () {
povratak`Zovem se ${name}`;
}
};
Zatim možete ukloniti reciName od oba konstruktora.
Da biste naslijedili svojstva od supertipa, koristite Object.create(). Postavljate prototip oba konstruktora na instancu nadtipa. U ovom slučaju postavljamo Student i Učitelj, nastavnik, profesor prototipa u instancu IndividualDetails.
Evo ga:
Student.prototip = Objekt.create (IndividualDetails.prototype);
Učitelj.prototip = Objekt.create (IndividualDetails.prototype);
Radeći ovo, Student i Učitelj, nastavnik, profesor naslijediti sva svojstva supertipa, IndividualDetails.
Ovo je kako vježbati DRY u OOP-u koristeći supertipove.
Konstruktori mijenjaju igru
Konstruktori su ključna komponenta JavaScripta, a ovladavanje njihovom funkcionalnošću ključno je za razvoj OOP JavaScript aplikacija. Možete koristiti konstruktor za stvaranje objekata koji dijele svojstva i metode. Također možete koristiti nasljeđivanje za definiranje hijerarhije objekata.
U ES6 možete koristiti razreda ključna riječ za definiranje klasičnih objektno orijentiranih klasa. Ova verzija JavaScripta također podržava a konstruktor ključna riječ.