CodeGym /Kurslar /Frontend SELF AZ /Siniflərin miras alınması

Siniflərin miras alınması

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

7.1 Mirasın əsasları

JavaScript-də siniflərin miras alınması mövcud sinifləri yenilərini yaratmaq üçün istifadə etməyə və onların funksionallığını genişləndirməyə imkan verir. Bu, obyekt yönümlü proqramlaşdırmanın (OOP) əsas aspektlərindən biridir və siniflər iyerarxiyasını qurmağa və obyektlərin davranışlarını idarə etməyə kömək edir.

Siniflərin miras alınması üçün extends açar sözü istifadə olunur. Başqa bir sinifdən miras alan sinif "törəmə sinif" (subclass), miras alınan sinif isə "əsas sinif" (superclass) adlanır.

Nümunə:

JavaScript
    
      class Animal {
        constructor(name) {
          this.name = name;
        }

        speak() {
          console.log(`${this.name} səs çıxarır.`);
        }
      }

      class Dog extends Animal {
        speak() {
          console.log(`${this.name} hürür.`);
        }
      }

      const dog = new Dog('Rex');
      dog.speak(); // "Rex hürür."
    
  

İzah:

  • Animal sinfi bir konstruktor və speak() adlı metod ilə əsas sinif kimi çıxış edir
  • Dog sinfi Animal-dan miras alır və speak() metodunu yenidən müəyyən edir
  • Dog sinifinin dog nümunəsi yenidən müəyyən edilmiş speak() metodunu istifadə edir

7.2 super açar sözü

super açar sözü törəmə sinifdən əsas sinifin konstruktorunu və ya metodlarını çağırmaq üçün istifadə edilir.

1. Əsas sinifin konstruktorunun çağırılması

Törəmə sinif this-dən istifadə etməzdən əvvəl super() istifadə edərək əsas sinifin konstruktorunu çağırmalıdır.

Misal:

Dog konstrukturu super(name) çağırır ki, əsas sinif Animal-in name xüsusiyyətini təşəkkül etdirsin.

JavaScript
    
      class Animal {
        constructor(name) {
          this.name = name;
        }

        speak() {
          console.log(`${this.name} səslər çıxarır.`);
        }
      }

      class Dog extends Animal {
        constructor(name, breed) {
          super(name);
          this.breed = breed;
        }

        speak() {
          console.log(`${this.name} hürür.`);
        }
      }

      const dog = new Dog('Rex', 'Labrador');
      console.log(dog.name); // "Rex"
      console.log(dog.breed); // "Labrador"
      dog.speak(); // "Rex hürür."
    
  

2. Əsas sinif metodlarının çağırılması

Əsas sinif metodları törəmə sinifdən super vasitəsilə çağırıla bilər.

Misal:

Dog sinifinin speak() metodu super.speak() istifadə edərək əsas sinif Animal-in speak() metodunu çağırır və sonra öz loqikasını icra edir.

JavaScript
    
      class Animal {
        constructor(name) {
          this.name = name;
        }

        speak() {
          console.log(`${this.name} səslər çıxarır.`);
        }
      }

      class Dog extends Animal {
        speak() {
          super.speak(); // Əsas sinif metodunun çağırılması
          console.log(`${this.name} hürür.`);
        }
      }

      const dog = new Dog('Rex');
      dog.speak();

      // "Rex səslər çıxarır."
      // "Rex hürür."
    
  

7.3 Miras alma və metodların yenidən təyin edilməsi

Miras alma törəmə siniflərə baza sinfinin metodlarını yenidən təyin etməyə imkan verir. Bu, metodların funksionallığını dəyişdirməyə və ya genişləndirməyə imkan yaradır.

Nümunə:

Dog sinifinin speak() metodu baza sinfi olan Animal-ın speak() metodunu yenidən təyin edərək öz implementasiyasını təmin edir.

JavaScript
    
      class Animal {
        constructor(name) {
          this.name = name;
        }

        speak() {
          console.log(`${this.name} səs çıxarır.`);
        }
      }

      class Dog extends Animal {
        speak() {
          console.log(`${this.name} hürür.`);
        }
      }

      const animal = new Animal('Generic Animal');
      animal.speak(); // "Generic Animal səs çıxarır."

      const dog = new Dog('Rex');
      dog.speak(); // "Rex hürür."
    
  

7.4 İrsən alınma və əlavə metodlar

Törəmə sinif baz sinifdə mövcud olmayan yeni metodlar əlavə edə bilər.

Nümunə:

Dog sinifi, baz sinif Animal-da mövcud olmayan yeni fetch() metodunu əlavə edir.

JavaScript
    
      class Animal {
        constructor(name) {
          this.name = name;
        }

        speak() {
          console.log(`${this.name} səs çıxarır.`);
        }
      }

      class Dog extends Animal {
        speak() {
          console.log(`${this.name} hürür.`);
        }

        fetch() {
          console.log(`${this.name} gətirir.`);
        }
      }

      const dog = new Dog('Rex');
      dog.speak(); // "Rex hürür."
      dog.fetch(); // "Rex gətirir."
    
  

7.5 İrsiliyin yoxlanması

İrsiliyi yoxlamaq üçün instanceof operatorundan və isPrototypeOf() metodundan istifadə edə bilərsiz.

Nümunə:

instanceof operatoru obyektin sinifin nümunəsi olub-olmadığını yoxlayır. isPrototypeOf() metodu obyektin prototipinin digər obyektin prototiplər zəncirinin bir hissəsi olub-olmadığını yoxlayır.

JavaScript
    
      console.log(dog instanceof Dog); // true
      console.log(dog instanceof Animal); // true
      console.log(Animal.prototype.isPrototypeOf(Dog.prototype)); // true
    
  
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION