Sobes.tech
Middle

Mis on prototüübid JavaScriptis?

sobes.tech AI

Vastus AI-lt

JavaScripti objektid võivad pärida omadusi ja meetodeid teistelt objektidelt prototüüpide mehhanismi kaudu. Igal JavaScripti objektil on sisemine varjatud omadus [[Prototype]], mis viitab teisele objektile, mis on selle prototüüp. Kui pöördutakse objekti omaduse või meetodi poole, otsib JavaScripti mootor esmalt seda otse objekti seest. Kui seda ei leidu, pöördub ta [[Prototype]] omaduse poole ja otsib prototüübist. See protsess kordub prototüüpide ahelas, kuni omadus leitakse või jõutakse null-i (ahela lõpp).

Põhikonseptsioonid:

  • Prototüüpide ahel: Objektide jada, mis on seotud [[Prototype]] kaudu.
  • Pärimine: Objektid pärivad oma prototüüpide omadused ja meetodid.
  • __proto__: Ajalooliselt kasutatud (kuigi mitte standardne algselt) omadus [[Prototype]]-le juurdepääsuks. Nüüd soovitatakse kasutada Object.getPrototypeOf().
  • prototype: Konstruktori omadus, millele viitab [[Prototype]] loodud eksemplaridele, mis on tehtud selle konstruktoriga.

Näide konstruktoriga ja prototüübiga:

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

// Meetodi lisamine prototüübile
Person.prototype.sayHello = function() {
  console.log("Tere, minu nimi on " + this.name);
};

// Eksemplari loomine
const person1 = new Person("Alice", 30);

// Meetodi kutsumine prototüübist
person1.sayHello(); // Väljund: Tere, minu nimi on Alice

// Pääs prototüübile eksemplarist
console.log(Object.getPrototypeOf(person1) === Person.prototype); // Väljund: true

Selles näites:

  • Person on konstruktorifunktsioon.
  • Person.prototype on objekt, mis on kõigi new Person()-iga loodud eksemplaride prototüüp.
  • sayHello on meetod, mis on lisatud prototüübile. Kõik Person-i eksemplarid pärivad selle meetodi.
  • Kui kutsutakse person1.sayHello(), otsib JavaScripti mootor sayHello person1-st. Kui seda ei leidu, pöördub ta [[Prototype]]-i person1-l (mis on võrdne Person.prototype) ja leiab meetodi sealt.

Prototüübid võimaldavad tõhusat mälu kasutust, kuna meetodid ja ühised omadused hoitakse prototüübile, mitte iga objekti eksemplarile dubleerimiseks.