Co jsou to prototypy v JavaScriptu?
sobes.tech AI
Odpověď od AI
V JavaScriptu mohou objekty dědit vlastnosti a metody od jiných objektů prostřednictvím mechanismu prototypů. Každý objekt v JavaScriptu má interní skrytou vlastnost [[Prototype]], která odkazuje na jiný objekt, jeho prototyp. Když se přistupuje k vlastnosti nebo metodě objektu, JavaScript nejprve hledá v samotném objektu. Pokud ji nenajde, odkazuje na vlastnost [[Prototype]] a hledá v prototypu. Tento proces se opakuje po řetězci prototypů, dokud se vlastnost nenajde nebo nedojde k null (konec řetězce).
Hlavní koncepty:
- Řetězec prototypů: Sekvence objektů propojených přes vlastnost
[[Prototype]]. - Dědičnost: Objekty dědí vlastnosti a metody svých prototypů.
__proto__: Historicky používaná (ačkoliv ne standardizovaná původně) vlastnost pro přístup k[[Prototype]]. Dnes je doporučeno používatObject.getPrototypeOf().prototype: Vlastnost konstruktoru, na kterou odkazuje[[Prototype]]instancí vytvořených tímto konstruktorem.
Příklad s konstruktorem a prototypem:
// Konstruktor
function Person(name, age) {
this.name = name;
this.age = age;
}
// Přidání metody do prototypu
Person.prototype.sayHello = function() {
console.log("Ahoj, jmenuji se " + this.name);
};
// Vytvoření instance
const person1 = new Person("Alice", 30);
// Volání metody z prototypu
person1.sayHello(); // Výstup: Ahoj, jmenuji se Alice
// Přístup k prototypu instance
console.log(Object.getPrototypeOf(person1) === Person.prototype); // Výstup: true
V tomto příkladu:
Personje konstruktorová funkce.Person.prototypeje objekt, který slouží jako prototyp pro všechny instance vytvořené pomocínew Person().sayHelloje metoda přidaná do prototypu. Všechny instancePersondědí tuto metodu.- Když voláme
person1.sayHello(), JavaScript engine hledásayHellovperson1. Pokud ji nenajde, odkazuje na[[Prototype]]person1(který je rovenPerson.prototype) a najde metodu tam.
Prototypy umožňují efektivní využití paměti, protože metody a sdílené vlastnosti jsou uloženy v prototypu, nikoliv duplikovány v každé instanci objektu.