Mi a prototípus a JavaScriptben?
sobes.tech MI
Válasz az MI-től
A JavaScript-ben az objektumok örökölhetnek tulajdonságokat és metódusokat más objektumoktól a prototípus mechanizmus révén. Minden JavaScript objektumnak van egy belső, rejtett [[Prototype]] tulajdonsága, amely egy másik objektumra mutat, amely a prototípusa. Amikor egy objektum tulajdonságához vagy metódusához férünk hozzá, a JavaScript motor először az objektumban keresi. Ha nem találja, akkor a [[Prototype]] tulajdonságra néz, és a prototípusban keresi. Ez a folyamat ismétlődik a prototípus láncon, amíg a tulajdonságot meg nem találja vagy el nem éri a null-t (a lánc végét).
Fő fogalmak:
- Prototípus lánc: Olyan objektumok sorozata, amelyek a
[[Prototype]]tulajdonságon keresztül vannak összekötve. - Öröklődés: Az objektumok öröklik a prototípusaik tulajdonságait és metódusait.
__proto__: Történetileg használt (bár nem szabványosított) tulajdonság a[[Prototype]]eléréséhez. Jelenleg aObject.getPrototypeOf()használata ajánlott.prototype: A konstruktor tulajdonsága, amelyre a[[Prototype]]hivatkozik a konstruktorral létrehozott példányok esetében.
Példa konstruktorral és prototípussal:
// Konstruktor
function Person(name, age) {
this.name = name;
this.age = age;
}
// Metódus hozzáadása a prototípushoz
Person.prototype.sayHello = function() {
console.log("Szia, a nevem " + this.name);
};
// Példány létrehozása
const person1 = new Person("Alice", 30);
// Metódus hívása a prototípusból
person1.sayHello(); // Kimenet: Szia, a nevem Alice
// A példány prototípusához való hozzáférés
console.log(Object.getPrototypeOf(person1) === Person.prototype); // Kimenet: true
Ebben a példában:
Personegy konstruktor függvény.Person.prototypeaz az objektum, amely a prototípusa mindennew Person()-nel létrehozott példánynak.sayHelloegy metódus, amelyet a prototípushoz adtak hozzá. MindenPersonpéldány örökli ezt a metódust.- Amikor
person1.sayHello()-t hívunk, a JavaScript motor megkeresi asayHello-tperson1-ben. Ha nem találja, akkor a[[Prototype]]-ra, azaz aPerson.prototype-ra néz, és ott megtalálja a metódust.
A prototípusok hatékony memóriahasználatot tesznek lehetővé, mivel a közös metódusokat és tulajdonságokat a prototípusban tárolják, nem pedig minden objektumpéldányban másolják.