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 kasutadaObject.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:
Personon konstruktorifunktsioon.Person.prototypeon objekt, mis on kõiginew Person()-iga loodud eksemplaride prototüüp.sayHelloon meetod, mis on lisatud prototüübile. KõikPerson-i eksemplarid pärivad selle meetodi.- Kui kutsutakse
person1.sayHello(), otsib JavaScripti mootorsayHelloperson1-st. Kui seda ei leidu, pöördub ta[[Prototype]]-iperson1-l (mis on võrdnePerson.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.