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ə:
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ış edirDog
sinfiAnimal
-dan miras alır vəspeak()
metodunu yenidən müəyyən edirDog
sinifinindog
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.
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.
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.
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.
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.
console.log(dog instanceof Dog); // true
console.log(dog instanceof Animal); // true
console.log(Animal.prototype.isPrototypeOf(Dog.prototype)); // true
GO TO FULL VERSION