Какви са прототипите в JavaScript?
sobes.tech AI
Отговор от AI
В JavaScript обектите могат да наследяват свойства и методи от други обекти чрез механизма на прототипите. Всеки обект в JavaScript има вътрешно скрито свойство [[Prototype]], което сочи към друг обект, неговият прототип. Когато се достъпва до свойство или метод на обект, JavaScript първо го търси в самия обект. Ако не го намери, проверява свойството [[Prototype]] и търси в прототипа. Този процес се повтаря по веригата на прототипите, докато свойството не бъде намерено или не достигне null (краят на веригата).
Основни концепции:
- Верига на прототипи: Последователност от обекти, свързани чрез свойството
[[Prototype]]. - Наследяване: Обектите наследяват свойства и методи от своите прототипи.
__proto__: Исторически използвано (макар и не стандартизирано първоначално) свойство за достъп до[[Prototype]]. В днешно време се препоръчва използването наObject.getPrototypeOf().prototype: Свойство на конструктора, към което сочи[[Prototype]]в създадените с него обекти.
Пример с конструктор и прототип:
// Конструктор
function Person(name, age) {
this.name = name;
this.age = age;
}
// Добавяне на метод към прототипа
Person.prototype.sayHello = function() {
console.log("Здравейте, казвам се " + this.name);
};
// Създаване на екземпляр
const person1 = new Person("Alice", 30);
// Викаме метода от прототипа
person1.sayHello(); // Изход: Здравейте, казвам се Alice
// Достъп до прототипа на екземпляра
console.log(Object.getPrototypeOf(person1) === Person.prototype); // Изход: true
В този пример:
Personе конструкторска функция.Person.prototypeе обектът, който служи като прототип за всички екземпляри, създадени сnew Person().sayHelloе метод, добавен към прототипа. Всички екземпляри наPersonнаследяват този метод.- Когато се извика
person1.sayHello(), JavaScript моторът търсиsayHelloвperson1. Ако не го намери, се обръща към[[Prototype]]наperson1(който е равен наPerson.prototype) и намира метода там.
Прототипите осигуряват ефективно използване на паметта, тъй като методите и общите свойства се съхраняват в прототипа, а не се дублират във всеки обект.