Middle
Kas ir prototipi JavaScript?
sobes.tech AI
Atbilde no AI
JavaScript objekti var manto īpašības un metodes no citiem objektiem, izmantojot prototipu mehānismu. Katram JavaScript objektam ir iekšēja slēpta īpašība [[Prototype]], kas norāda uz citu objektu, kas ir tā prototips. Kad tiek piekļūts objekta īpašībai vai metodei, JavaScript dzinējs vispirms meklē to pašā objektā. Ja tas neatrod, tas piekļūst [[Prototype]] īpašībai un meklē prototipā. Šis process atkārtojas prototipu ķēdē, līdz īpašība tiek atrasta vai sasniedz null (ķēdes beigas).
Galvenās koncepcijas:
- Prototipu ķēde: Objektu secība, kas ir saistīta caur
[[Prototype]]īpašību. - Mantošana: Objekti manto savus prototipus īpašības un metodes.
__proto__: Vēsturiski izmantota (lai gan ne standartizēta sākotnēji) īpašība piekļūšanai pie[[Prototype]]. Tagad ieteicams izmantotObject.getPrototypeOf().prototype: Konstruktoru īpašība, uz kuru norāda[[Prototype]]piemēriem, kas izveidoti ar šo konstruktoru.
Piemērs ar konstruktoru un prototipu:
// Konstruktoru
function Person(name, age) {
this.name = name;
this.age = age;
}
// Pievienojam metodi prototipam
Person.prototype.sayHello = function() {
console.log("Sveiki, mani sauc " + this.name);
};
// Izveidojam piemēru
const person1 = new Person("Alice", 30);
// Izsaucam metodi no prototipa
person1.sayHello(); // Izvade: Sveiki, mani sauc Alice
// Piekļuve prototipam no piemēra
console.log(Object.getPrototypeOf(person1) === Person.prototype); // Izvade: true
Šajā piemērā:
Personir konstruktorfunkcija.Person.prototypeir objekts, kas ir visunew Person()izveidoto piemēru prototips.sayHelloir metode, kas pievienota prototipam. VisiemPersonpiemēriem šī metode ir mantojoša.- Kad tiek izsaukts
person1.sayHello(), JavaScript dzinējs meklēsayHelloperson1. Ja tas neatrod, tas piekļūst[[Prototype]]person1(kas ir vienāds arPerson.prototype) un tur atrod metodi.
Prototipi nodrošina efektīvu atmiņas izmantošanu, jo metodes un kopīgās īpašības tiek glabātas prototipā, nevis dublētas katrā objekta piemēra.