În acest tutorial, veți afla despre prototipuri în JavaScript cu ajutorul exemplelor.
Înainte de a învăța prototipuri, asigurați-vă că verificați aceste tutoriale:
- Obiecte JavaScript
- Funcția constructor JavaScript
După cum știți, puteți crea un obiect în JavaScript folosind o funcție constructor de obiecte. De exemplu,
// constructor function function Person () ( this.name = 'John', this.age = 23 ) // creating objects const person1 = new Person(); const person2 = new Person();
În exemplul de mai sus, function Person()
este o funcție constructor de obiecte. Am creat două obiecte person1
și person2
din ea.
Prototip JavaScript
În JavaScript, fiecare funcție și obiect are în mod implicit o proprietate numită prototip. De exemplu,
function Person () ( this.name = 'John', this.age = 23 ) const person = new Person(); // checking the prototype value console.log(Person.prototype); // (… )
În exemplul de mai sus, încercăm să accesăm proprietatea prototip a unei Person
funcții constructor.
Deoarece proprietatea prototip nu are nicio valoare în acest moment, arată un obiect gol (…).
Moștenirea prototipului
În JavaScript, un prototip poate fi folosit pentru a adăuga proprietăți și metode unei funcții de constructor. Iar obiectele moștenesc proprietăți și metode de la un prototip. De exemplu,
// 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);
Ieșire
(sex: „masculin”) masculin masculin
În programul de mai sus, am adăugat o nouă proprietate gender
la Person
funcția constructor folosind:
Person.prototype.gender = 'male';
Apoi obiectează person1
și person2
moștenește proprietatea gender
de la proprietatea prototip a Person
funcției constructor.
Prin urmare, ambele obiecte person1
și person2
pot accesa proprietatea de gen.
Notă: Sintaxa pentru a adăuga proprietatea la o funcție de constructor de obiecte este:
objectConstructorName.prototype.key = 'value';
Prototipul este folosit pentru a oferi proprietăți suplimentare tuturor obiectelor create dintr-o funcție constructor.
Adăugați metode la o funcție de constructor folosind prototip
De asemenea, puteți adăuga metode noi la o funcție constructor folosind prototip. De exemplu,
// 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
În programul de mai sus, o nouă metodă greet
este adăugată la Person
funcția constructor folosind un prototip.
Schimbarea prototipului
Dacă se modifică o valoare prototip, atunci toate obiectele noi vor avea valoarea proprietății modificată. Toate obiectele create anterior vor avea valoarea anterioară. De exemplu,
// 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
Notă : Nu trebuie să modificați prototipurile obiectelor încorporate JavaScript standard, cum ar fi șiruri, tablouri etc. Este considerată o practică proastă.
Înlănțuirea prototipului JavaScript
Dacă un obiect încearcă să acceseze aceeași proprietate care este în funcția constructor și obiectul prototip, obiectul preia proprietatea din funcția constructor. De exemplu,
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
În programul de mai sus, un nume de proprietate este declarat în funcția constructor și, de asemenea, în proprietatea prototip a funcției constructor.
Când programul se execută, person1.name
caută în funcția constructor pentru a vedea dacă există o proprietate numită name
. Deoarece funcția constructor are numele proprietate cu valoare 'John'
, obiectul preia valoare din acea proprietate.
Când programul se execută, person1.age
caută în funcția constructor pentru a vedea dacă există o proprietate numită age
. Deoarece funcția constructor nu are age
proprietăți, programul analizează obiectul prototip al funcției constructor și obiectul moștenește proprietatea de la obiectul prototip (dacă este disponibil).
Notă : De asemenea, puteți accesa proprietatea prototip a unei funcții constructor dintr-un obiect.
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 )
În exemplul de mai sus, un person
obiect este utilizat pentru a accesa proprietatea prototip folosind __proto__
. Cu toate acestea, __proto__
a fost învechit și ar trebui să evitați utilizarea acestuia.