Sobes.tech
Middle

Ce sunt prototipurile în JavaScript?

sobes.tech AI

Răspuns de la AI

În JavaScript, obiectele pot moșteni proprietăți și metode de la alte obiecte prin mecanismul de prototipuri. Fiecare obiect în JavaScript are o proprietate internă ascunsă [[Prototype]], care indică către un alt obiect, prototipul său. Când se accesează o proprietate sau metodă a unui obiect, motorul JavaScript o caută mai întâi în obiectul însuși. Dacă nu o găsește, se uită la proprietatea [[Prototype]] și caută în prototip. Acest proces se repetă pe lanțul de prototipuri până când proprietatea este găsită sau până când se ajunge la null (sfârșitul lanțului).

Concepte principale:

  • Lanț de prototipuri: Secvență de obiecte legate prin proprietatea [[Prototype]].
  • Moștenire: Obiectele moștenesc proprietățile și metodele prototipurilor lor.
  • __proto__: Proprietate utilizată istoric (deși nu standardizată inițial) pentru accesul la [[Prototype]]. În prezent, se recomandă utilizarea Object.getPrototypeOf().
  • prototype: Proprietate a constructorului la care face referire [[Prototype]] în instanțele create cu acel constructor.

Exemplu cu constructor și prototip:

// Constructor
function Person(name, age) {
  this.name = name;
  this.age = age;
}

// Adăugarea metodei în prototip
Person.prototype.sayHello = function() {
  console.log("Salut, numele meu este " + this.name);
};

// Crearea unei instanțe
const person1 = new Person("Alice", 30);

// Apelarea metodei din prototip
person1.sayHello(); // Output: Salut, numele meu este Alice

// Accesarea prototipului instanței
console.log(Object.getPrototypeOf(person1) === Person.prototype); // Output: true

În acest exemplu:

  • Person este o funcție constructor.
  • Person.prototype este obiectul care servește drept prototip pentru toate instanțele create cu new Person().
  • sayHello este o metodă adăugată în prototip. Toate instanțele Person moștenesc această metodă.
  • Când se apelează person1.sayHello(), motorul JavaScript caută sayHello în person1. Dacă nu o găsește, se uită la [[Prototype]] al lui person1 (care este egal cu Person.prototype) și găsește metoda acolo.

Prototipurile permit o utilizare eficientă a memoriei, deoarece metodele și proprietățile comune sunt stocate în prototip, nu fiind duplicate în fiecare instanță de obiect.