JavaScript prototip (s primjerima)

U ovom ćete tutorijalu uz primjere naučiti o prototipovima u JavaScript-u.

Prije nego što naučite prototipove, provjerite ove upute:

  • JavaScript objekti
  • Funkcija konstruktora JavaScript-a

Kao što znate, objekt možete stvoriti u JavaScript-u pomoću funkcije konstruktora objekta. Na primjer,

 // constructor function function Person () ( this.name = 'John', this.age = 23 ) // creating objects const person1 = new Person(); const person2 = new Person();

U gornjem primjeru function Person()je funkcija konstruktora objekta. Stvorili smo dva objekta person1i person2od njega.

JavaScript prototip

U JavaScript-u svaka funkcija i objekt imaju svojstvo koje se prema zadanim postavkama naziva prototip. Na primjer,

 function Person () ( this.name = 'John', this.age = 23 ) const person = new Person(); // checking the prototype value console.log(Person.prototype); // (… )

U gornjem primjeru pokušavamo pristupiti svojstvu prototipa Personfunkcije konstruktora.

Budući da svojstvo prototipa trenutno nema vrijednost, prikazuje prazan objekt (…).

Nasljeđivanje prototipa

U JavaScriptu se prototip može koristiti za dodavanje svojstava i metoda u funkciju konstruktora. A objekti nasljeđuju svojstva i metode iz prototipa. Na primjer,

 // constructor function function Person () ( this.name = 'John', this.age = 23 ) // creating objects const person1 = new Person(); const person2 = new Person(); // adding property to constructor function Person.prototype.gender = 'male'; // prototype value of Person console.log(Person.prototype); // inheriting the property from prototype console.log(person1.gender); console.log(person2.gender);

Izlaz

 (rod: "muško") muško muško

U gore navedenom programu dodali smo novo svojstvo genderu Personfunkciju konstruktora koristeći:

 Person.prototype.gender = 'male';

Zatim objekt person1i person2nasljeđuje svojstvo genderiz svojstva prototipa Personfunkcije konstruktora.

Dakle, oba objekta mogu person1i person2mogu pristupiti rodnom svojstvu.

Napomena: Sintaksa za dodavanje svojstva u funkciju konstruktora objekta je:

 objectConstructorName.prototype.key = 'value';

Prototip se koristi za pružanje dodatnih svojstava svim objektima stvorenim iz funkcije konstruktora.

Dodajte metode u funkciju konstruktora pomoću prototipa

Također možete dodati nove metode u funkciju konstruktora pomoću prototipa. Na primjer,

 // constructor function function Person () ( this.name = 'John', this.age = 23 ) // creating objects const person1 = new Person(); const person2 = new Person(); // adding a method to the constructor function Person.prototype.greet = function() ( console.log('hello' + ' ' + this.name); ) person1.greet(); // hello John person2.greet(); // hello John

U gornjem programu, nova metoda greetdodana je u Personfunkciju konstruktora pomoću prototipa.

Promjena prototipa

Ako se promijeni vrijednost prototipa, tada će svi novi objekti imati promijenjenu vrijednost svojstva. Svi prethodno stvoreni objekti imat će prethodnu vrijednost. Na primjer,

 // constructor function function Person() ( this.name = 'John' ) // add a property Person.prototype.age = 20; // creating an object const person1 = new Person(); console.log(person1.age); // 20 // changing the property value of prototype Person.prototype = ( age: 50 ) // creating new object const person3 = new Person(); console.log(person3.age); // 50 console.log(person1.age); // 20

Napomena : Ne biste trebali mijenjati prototipove standardnih JavaScript ugrađenih objekata poput nizova, nizova itd. Smatra se lošom praksom.

Lanciranje prototipa JavaScript-a

Ako objekt pokuša pristupiti istom svojstvu koje je u funkciji konstruktora i prototipu objekta, objekt preuzima svojstvo iz funkcije konstruktora. Na primjer,

 function Person() ( this.name = 'John' ) // adding property Person.prototype.name = 'Peter'; Person.prototype.age = 23 const person1 = new Person(); console.log(person1.name); // John console.log(person1.age); // 23

U gore navedenom programu, ime svojstva deklarirano je u funkciji konstruktora, a također i u svojstvu prototipa funkcije konstruktora.

Kada se program izvrši, person1.nameu funkciji konstruktora pregledava postoji li neko svojstvo s imenom name. Budući da konstruktorska funkcija ima svojstvo imena s vrijednošću 'John', objekt uzima vrijednost iz tog svojstva.

Kada se program izvrši, person1.ageu funkciji konstruktora pregledava postoji li neko svojstvo s imenom age. Budući da konstruktorska funkcija nema agesvojstvo, program pregledava prototipni objekt konstruktorske funkcije i objekt nasljeđuje svojstvo od prototipskog objekta (ako je dostupan).

Napomena : Također možete pristupiti prototipu svojstva funkcije konstruktora iz objekta.

 function Person () ( this.name = 'John' ) // adding a prototype Person.prototype.age = 24; // creating object const person = new Person(); // accessing prototype property console.log(person.__proto__); // ( age: 24 )

U gornjem primjeru personobjekt se koristi za pristup svojstvu prototipa pomoću __proto__. Međutim, __proto__zastario je i trebali biste ga izbjegavati upotrebljavati.

Zanimljivi članci...