CodeGym /Kurslar /Frontend SELF AZ /Prototip əsasında irsiyyət

Prototip əsasında irsiyyət

Frontend SELF AZ
Səviyyə , Dərs
Mövcuddur

4.1 İrsiyyət — bu sadədir

İrsiyyət — bu, obyekt-yönümlü proqramlaşdırmanın (OOP) əsas konsepsiyasına aiddir və bir sinifə (uşaq sinifi və ya subclass adlanır) başqa bir sinifin sahələrini və metodlarını irsən götürməyə imkan yaradır (valideyn sinifi və ya superclass adlanır).

İrsiyyət

Bu yanaşma daha ümumi siniflər yaratmağa və kodun yenidən istifadə edilməsinə imkan verir, nəticədə kodun təşkilatını və dəstəyini yaxşılaşdırır.

İrsiyyət nəyə lazımdır?

Təsəvvür edin ki, siz müəyyən bir kod yazmalı və bunu sinif kimi təşkil etməyə qərar vermisiniz. Sonra sizin layihənizdə artıq mövcud bir sinif olduğunu öyrənirsiniz, bu sinif sizin sinifinizdə olması lazım olan demək olar ki, hər şeyi edir. Siz sadəcə həmin sinifin kodunu öz sinifinizə kopyalayıb zövq alaraq istifadə edə bilərsiniz.

Yaxud da «kopyalamaq kimi». Siz həmin sinifi öz sinifinizin valideyni olaraq elan edə bilərsiniz və o zaman JavaScript sizin sinifinizə valideyn sinifin davranışını əlavə edəcək.

Təsəvvür edin ki, siz təbiətsiniz və İt yaratmaq istəyirsiniz. Daha sürətli nədir: itləri bakteriyadan 1 milyard ilə yaratmaq yoxsa canavarları 200 min ilə əhliləşdirmək?

4.2 Prototiplər vasitəsilə mirasalma konsepsiyası

JavaScript-də prototiplər vasitəsilə mirasalma — obyektlərin digər obyektlərin xassə və metodlarını miras almağa imkan verən əsas mexanizmlərdən biridir. Bu, kompleks obyekt iyerarxiyalarını yaratmağa və kodun təkrar istifadəsinə imkan verir.

JavaScript-də hər bir obyektin onun prototipinə işarə edən gizli [[Prototype]] xassəsi var. Prototiplər mirasalmaya nail olmaq üçün istifadə edilir ki, bu da obyektlərə digər obyektlərin xassələrini və metodlarını miras almağa imkan verir.

Sadə mirasalma nümunəsi

Addım 1: Əsas obyektin yaradılması

JavaScript
    
      const animal = {
        eat() {
          console.log('Yemək yeyir...');
        },

        sleep() {
          console.log('Yatır...');
        }
      };
    
  

Addım 2: Miras almış obyektin yaradılması

JavaScript
    
      const dog = Object.create(animal);

      dog.bark = function() {
        console.log('Havlayır...');
      };
    
  

Addım 3: Miras alınan xassələrin və metodların istifadəsi

JavaScript
    
      dog.eat();   // Çıxış: Yemək yeyir...
      dog.sleep(); // Çıxış: Yatır...
      dog.bark();  // Çıxış: Havlayır...
    
  

Bu nümunədə dog obyekti animal obyektindən eat()sleep() metodlarını miras alır və bark() adlı öz metodunu əlavə edir.

4.3 Prototiplər vasitəsilə dərin miras alma

Prototiplər zənciri

JavaScript-də miras alma daha mürəkkəb ola bilər, çünki obyektlər bir-birindən miras alaraq prototiplər zənciri yaradır.

Prototiplər zənciri nümunəsi

Bu nümunədə dog obyekti mammal-dan miras alır, o isə öz növbəsində animal-dan miras alır. Bu, bir zəncir yaradır, burada dog obyekti mammalanimal-ın bütün metodlarına çıxış əldə edir.

JavaScript
    
      const animal = {
        eat() {
          console.log('Yemək yeyir...');
        }
      };

      const mammal = Object.create(animal);

      mammal.walk = function() {
        console.log('Yeriyir...');
      };

      const dog = Object.create(mammal);
      dog.bark = function() {
        console.log('Hürür...');
      };

      dog.eat();   // Çap edəcək: Yemək yeyir...
      dog.walk();  // Çap edəcək: Yeriyir...
      dog.bark();  // Çap edəcək: Hürür...
    
  

Prototiplər zəncirini yoxlamaq

isPrototypeOf() metodu bir obyektin digər obyektin prototipi olub-olmadığını yoxlamaq üçün istifadə olunur.

Nümunə:

JavaScript
    
      console.log(animal.isPrototypeOf(mammal)); // Çap edəcək: true
      console.log(mammal.isPrototypeOf(dog));    // Çap edəcək: true
      console.log(animal.isPrototypeOf(dog));    // Çap edəcək: true
    
  

4.4 Metodların yenidən yüklənməsi

Prototip vasitəsilə mirasalma təkcə yeni metodlar əlavə etməyə yox, həm də mövcud metodları yenidən yükləməyə imkan verir.

Metodların yenidən yüklənməsinə nümunə

Bu nümunədə speak() metodu dog obyektində animal obyektində olan speak() metodunu yenidən yükləyir:

JavaScript
    
      const animal = {
        speak() {
          console.log('Heyvan danışır');
        }
      };

      const dog = Object.create(animal);
      dog.speak = function() {
        console.log('İt hürür');
      };

      animal.speak(); // Çap edəcək: Heyvan danışır
      dog.speak();    // Çap edəcək: İt hürür
    
  

Valideyn obyektin metodunu çağırmaq

JavaScript-də valideyn obyektin metodunu çağırmaq üçün call() və ya apply() metodundan istifadə edə bilərik.

Nümunə:

JavaScript
    
      const animal = {
        speak() {
          console.log('Heyvan danışır');
        }
      };

      const dog = Object.create(animal);
      dog.speak = function() {
        animal.speak.call(this);
        console.log('İt hürür');
      };

      dog.speak();

      // Çap edəcək:
      // Heyvan danışır
      // İt hürür
    
  

4.5 Prototipli miras almağın dərinləşdirilmiş istifadəsi

Daxili obyektləri genişləndirmək

JavaScript-in daxili obyektlərini onların prototiplərinə metodlar əlavə edərək genişləndirə bilərsiniz.

Nümunə:

JavaScript
    
      Array.prototype.sum = function() {
        return this.reduce((acc, value) => acc + value, 0);
      };

      const numbers = [1, 2, 3, 4, 5];

      console.log(numbers.sum()); // Çıxış: 15
    
  

Çoxsəviyyəli iyerarxiyaların yaradılması

Prototipli miras alma vasitəsilə daha mürəkkəb çoxsəviyyəli obyekt iyerarxiyaları yarada bilərsiniz.

Nümunə:

JavaScript
    
      const livingBeing = {
        breathe() {
          console.log('Nəfəs alır...');
        }
      };

      const animal = Object.create(livingBeing);
      animal.eat = function() {
        console.log('Yemək yeyir...');
      };

      const mammal = Object.create(animal);
      mammal.walk = function() {
        console.log('Gəzir...');
      };

      const dog = Object.create(mammal);
      dog.bark = function() {
        console.log('Hürür...');
      };

      dog.breathe(); // Çıxış: Nəfəs alır...
      dog.eat();     // Çıxış: Yemək yeyir...
      dog.walk();    // Çıxış: Gəzir...
      dog.bark();    // Çıxış: Hürür...
    
  
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION