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 naudotiObject.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:
Personyra konstruktoriaus funkcija.Person.prototypeyra objektas, kuris yra prototipas visiemsnew Person()sukurtų egzempliorių.sayHelloyra metodas, pridėtas prie prototipo. VisiPersonegzemplioriai paveldi šį metodą.- Kai kviečiama
person1.sayHello(), JavaScript variklis ieškosayHelloperson1. Jei neranda, jis kreipiasi į[[Prototype]]person1(kuris yra lygusPerson.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.