Čo sú to prototypy v JavaScript?
sobes.tech AI
Odpoveď od AI
V JavaScripte môžu objekty dediť vlastnosti a metódy od iných objektov prostredníctvom mechanizmu prototypov. Každý objekt v JavaScripte má vnútornú skrytú vlastnosť [[Prototype]], ktorá odkazuje na iný objekt, ktorý je jeho prototypom. Keď sa pristupuje k vlastnosti alebo metóde objektu, JavaScript engine najskôr hľadá v samotnom objekte. Ak ju nenájde, odkazuje na vlastnosť [[Prototype]] a hľadá v prototypu. Tento proces sa opakuje po reťazci prototypov, kým sa vlastnosť nenájde alebo kým nedosiahne null (koniec reťazca).
Hlavné koncepty:
- Prototypový reťazec: Sekvencia objektov spojených cez vlastnosť
[[Prototype]]. - Dedičstvo: Objekty dedí vlastnosti a metódy svojich prototypov.
__proto__: Historicky používaná (hoci nie štandardizovaná pôvodne) vlastnosť na prístup k[[Prototype]]. Teraz sa odporúča používaťObject.getPrototypeOf().prototype: Vlastnosť konštruktora, na ktorú odkazuje[[Prototype]]inštancií vytvorených pomocou tohto konštruktora.
Príklad s konštruktorom a prototypom:
// Konštruktor
function Person(name, age) {
this.name = name;
this.age = age;
}
// Pridanie metódy do prototypu
Person.prototype.sayHello = function() {
console.log("Ahoj, volám sa " + this.name);
};
// Vytvorenie inštancie
const person1 = new Person("Alice", 30);
// Volanie metódy z prototypu
person1.sayHello(); // Výstup: Ahoj, volám sa Alice
// Prístup k prototypu inštancie
console.log(Object.getPrototypeOf(person1) === Person.prototype); // Výstup: true
V tomto príklade:
Personje funkcia-konštruktor.Person.prototypeje objekt, ktorý je prototypom pre všetky inštancie vytvorené pomocounew Person().sayHelloje metóda pridaná do prototypu. Všetky inštanciePersondedí túto metódu.- Keď sa volá
person1.sayHello(), JavaScript engine hľadásayHellovperson1. Ak ju nenájde, odkazuje na[[Prototype]]person1(ktorý je rovnýPerson.prototype) a nachádza metódu tam.
Prototypy zabezpečujú efektívne využitie pamäte, pretože metódy a spoločné vlastnosti sú uložené v prototypu, nie sú duplikované v každej inštancii objektu.