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).

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ı
const animal = {
eat() {
console.log('Yemək yeyir...');
},
sleep() {
console.log('Yatır...');
}
};
Addım 2: Miras almış obyektin yaradılması
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
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()
və 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 mammal
və animal
-ın bütün metodlarına çıxış əldə edir.
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ə:
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:
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ə:
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ə:
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ə:
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...
GO TO FULL VERSION