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-ის ძრავა ეძებს sayHello-ს person1-ში. თუ ვერ პოულობს, მიმართავს [[Prototype]]-ს person1-ის (რომელიც თანაბარია Person.prototype) და იქ პოულობს მეთოდს.

პროტოტიპები უზრუნველყოფს მეხსიერების ეფექტიან გამოყენებას, რადგან მეთოდები და საერთო თვისებები ინახება პროტოტიპში, არ დუბლირდება თითოეულ ობიექტის მაგალითში.