Sobes.tech
Middle

Kas yra prototipai JavaScript?

sobes.tech AI

Atsakymas iš AI

JavaScript objektai gali paveldėti savybes ir metodus iš kitų objektų per prototipų mechanizmą. Kiekvienas JavaScript objektas turi vidinę paslėptą savybę [[Prototype]], kuri nurodo kitą objektą, kuris yra jo prototipas. Kai kreipiamasi į objekto savybę ar metodą, JavaScript variklis pirmiausia ieško jos pačiame objekte. Jei neranda, jis kreipiasi į [[Prototype]] savybę ir ieško prototipe. Šis procesas kartojasi prototipų grandinėje, kol savybė bus rasta arba pasieks null (pabaiga).

Pagrindinės sąvokos:

  • Prototipų grandinė: Objektų seka, susijusi per [[Prototype]] savybę.
  • Paveldėjimas: Objektai paveldi savo prototipų savybes ir metodus.
  • __proto__: Istoriškai naudojama (nors ir ne standartinė iš pradžių) savybė prieiti prie [[Prototype]]. Dabar rekomenduojama naudoti Object.getPrototypeOf().
  • prototype: Konstruktorio savybė, į kurią nurodo [[Prototype]] egzemplioriams, sukurtiems naudojant šį konstruktorių.

Pavyzdys su konstruktoriu ir prototipu:

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

// Pridedame metodą prie prototipo
Person.prototype.sayHello = function() {
  console.log("Labas, mano vardas " + this.name);
};

// Sukuriame egzempliorių
const person1 = new Person("Alice", 30);

// Kviečiame metodą iš prototipo
person1.sayHello(); // Išvestis: Labas, mano vardas Alice

// Prieiga prie prototipo iš egzemplioriaus
console.log(Object.getPrototypeOf(person1) === Person.prototype); // Išvestis: true

Šiame pavyzdyje:

  • Person yra konstruktoriaus funkcija.
  • Person.prototype yra objektas, kuris yra prototipas visiems new Person() sukurtų egzempliorių.
  • sayHello yra metodas, pridėtas prie prototipo. Visi Person egzemplioriai paveldi šį metodą.
  • Kai kviečiama person1.sayHello(), JavaScript variklis ieško sayHello person1. Jei neranda, jis kreipiasi į [[Prototype]] person1 (kuris yra lygus Person.prototype) ir ten randa metodą.

Prototipai užtikrina efektyvų atminties naudojimą, nes metodai ir bendros savybės saugomos prototipe, o ne dubliuojamos kiekviename objekto egzemplioriuje.