Sobes.tech
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 izmantot Object.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ā:

  • Person ir konstruktorfunkcija.
  • Person.prototype ir objekts, kas ir visu new Person() izveidoto piemēru prototips.
  • sayHello ir metode, kas pievienota prototipam. Visiem Person piemēriem šī metode ir mantojoša.
  • Kad tiek izsaukts person1.sayHello(), JavaScript dzinējs meklē sayHello person1. Ja tas neatrod, tas piekļūst [[Prototype]] person1 (kas ir vienāds ar Person.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.