Sobes.tech
Middle

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 a Object.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:

  • Person egy konstruktor függvény.
  • Person.prototype az az objektum, amely a prototípusa minden new Person()-nel létrehozott példánynak.
  • sayHello egy metódus, amelyet a prototípushoz adtak hozzá. Minden Person példány örökli ezt a metódust.
  • Amikor person1.sayHello()-t hívunk, a JavaScript motor megkeresi a sayHello-t person1-ben. Ha nem találja, akkor a [[Prototype]]-ra, azaz a Person.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.