V tej vadnici boste s pomočjo primerov spoznali prototipe v JavaScript.
Preden se naučite prototipov, si oglejte te vadnice:
- Predmeti JavaScript
- Funkcija konstruktorja JavaScript
Kot veste, lahko objekt v JavaScript ustvarite s pomočjo funkcije konstruktorja objektov. Na primer
// constructor function function Person () ( this.name = 'John', this.age = 23 ) // creating objects const person1 = new Person(); const person2 = new Person();
V zgornjem primeru function Person()
je funkcija konstruktorja objekta. Ustvarili smo dva predmeta person1
in person2
iz njega.
Prototip JavaScript
V JavaScript ima vsaka funkcija in objekt privzeto lastnost z imenom prototip. Na primer
function Person () ( this.name = 'John', this.age = 23 ) const person = new Person(); // checking the prototype value console.log(Person.prototype); // (… )
V zgornjem primeru poskušamo dostopati do lastnosti prototipa Person
konstruktorske funkcije.
Ker lastnost prototipa trenutno nima vrednosti, prikazuje prazen objekt (…).
Dedovanje prototipa
V JavaScript lahko prototip uporabite za dodajanje lastnosti in metod v konstruktorsko funkcijo. In predmeti podedujejo lastnosti in metode iz prototipa. Na primer
// 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);
Izhod
(spol: "moški") moški moški
V zgornjem programu smo funkciji konstruktorja dodali novo lastnost gender
z Person
uporabo:
Person.prototype.gender = 'male';
Nato objekt person1
in person2
podeduje lastnost gender
iz lastnosti prototipa Person
konstruktorske funkcije.
Zato, tako objekti person1
in person2
lahko dostopate do lastnine spolov.
Opomba: Sintaksa za dodajanje lastnosti v funkcijo konstruktorja objekta je:
objectConstructorName.prototype.key = 'value';
Prototip se uporablja za zagotavljanje dodatnih lastnosti za vse predmete, ustvarjene iz funkcije konstruktorja.
Dodajte metode v funkcijo konstruktorja s prototipom
Funkciji konstruktorja lahko s prototipom dodate tudi nove metode. Na primer
// 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
V zgornjem programu greet
je Person
funkcija konstruktorja dodala novo metodo s prototipom.
Spreminjanje prototipa
Če spremenite vrednost prototipa, bodo vsi novi predmeti imeli spremenjeno vrednost lastnosti. Vsi predhodno ustvarjeni predmeti bodo imeli prejšnjo vrednost. Na primer
// 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
Opomba : Ne smete spreminjati prototipov standardnih vgrajenih objektov JavaScript, kot so nizi, nizi itd. To se šteje za slabo prakso.
Veriženje prototipov JavaScript
Če objekt poskuša dostopati do iste lastnosti, ki je v konstruktorski funkciji in prototipu, objekt vzame lastnost iz konstruktorske funkcije. Na primer
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
V zgornjem programu je ime lastnosti razglašeno v konstruktorski funkciji in tudi v prototipni lastnosti konstruktorske funkcije.
Ko se program zažene, person1.name
poišče v konstruktorski funkciji, ali obstaja lastnost z imenom name
. Ker ima konstruktorska funkcija lastnost imena z vrednostjo 'John'
, objekt vzame vrednost iz te lastnosti.
Ko se program zažene, person1.age
poišče v konstruktorski funkciji, ali obstaja lastnost z imenom age
. Ker konstruktorska funkcija nima age
lastnosti, program preuči prototipni objekt konstruktorske funkcije in objekt podeduje lastnost od prototipskega objekta (če je na voljo).
Opomba : Do lastnosti prototipa funkcije konstruktorja lahko dostopate tudi iz predmeta.
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 )
V zgornjem primeru se person
objekt uporablja za dostop do lastnosti prototipa z uporabo __proto__
. Vendar __proto__
je bil zastarel in se ga izogibajte.