Sobes.tech
Middle

Ի՞նչ են 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 շարժիչը որոնում է sayHelloperson1-ում: Եթե չի գտնում, այն դիմում է [[Prototype]]-ին person1-ի (որը հավասար է Person.prototype) և գտնում է մեթոդը:

Պրոտոտիպները ապահովում են արդյունավետ հիշողության օգտագործում, քանի որ մեթոդներն ու ընդհանուր հատկությունները պահվում են պրոտոտիպում, ոչ թե կրկնվում յուրաքանչյուր օբյեկտի օրինակում: