3.1 Prototiplərin konsepsiyası
Prototiplər JavaScript-də əsas konsepsiyalardan biridir və obyektlərə digər obyektlərin xüsusiyyətlərini və metodlarını miras almağa imkan verir. Bir çox digər proqramlaşdırma dillərindən fərqli olaraq, burada miras siniflər vasitəsilə deyil, prototiplər əsasında həyata keçirilir. İndi isə prototiplərin nə olduğu, necə işlədiyi və necə istifadə edilə biləcəyini araşdıracağıq.
JavaScript-də Prototip — digər obyektlərin xüsusiyyətləri və metodlarını miras ala biləcəyi obyektdir. JavaScript-də hər bir obyektin [[Prototype]] adlı gizli bir xüsusiyyəti var, bu isə onun prototipinə işarə edir.
Bu prototipin də öz prototipləri ola bilər, bu isə prototiplər zənciri (prototype chain) yaradır. Obyektin xüsusiyyətləri və metodları bu zəncir vasitəsilə miras alına bilər. Bu, obyektlərin funksionallığı paylaşmasına və obyekt iyerarxiyaları yaratmasına imkan verir.
Proto xüsusiyyəti
JavaScript-də hər bir obyektin __proto__
adlı bir xüsusiyyəti var və bu, onun prototipinə işarə edir. Əgər bir xüsusiyyət və ya metod yaranan obyektdə tapılmırsa, bu xüsusiyyət vasitəsilə axtarış davam edir.
Bu nümunədə child
obyekti parent
obyektindən greet()
metodunu miras alır:
const parent = {
greet() {
console.log('Parent-dən salamlar');
}
};
const child = {
__proto__: parent
};
child.greet(); // Çap edəcək: Parent-dən salamlar
3.2 Prototiplərin yaradılması və istifadəsi
1. Object.create()
Object.create()
metodu müəyyən edilmiş prototiplə yeni obyekt yaratmağa imkan verir.
Nümunə:
const parent = {
greet() {
console.log('Salam parent-dən');
}
};
const child = Object.create(parent);
child.greet(); // Ekrana çıxacaq: Salam parent-dən
2. Prototipə xassələr və metodlar əlavə etmək
Xassələr və metodlar prototipə əlavə edilə bilər ki, onu miras alan bütün obyektlər üçün əlçatan olsun.
Bu nümunədə speak()
metodu animal
prototipinə əlavə edilir və dog
obyektinə əlçatandır:
const animal = {
speak() {
console.log(`${this.name} səs çıxarır.`);
}
};
const dog = Object.create(animal);
dog.name = 'Buddy';
dog.speak(); // Ekrana çıxacaq: Buddy səs çıxarır.
3. Obyektin prototipini dəyişmək
Obyektin prototipini Object.setPrototypeOf()
metodu ilə dəyişmək olar.
Bu nümunədə duck
obyektinin prototipi animal
-dan bird
-ə dəyişdirilir:
const animal = {
speak() {
console.log('Heyvan danışır');
}
};
const bird = {
fly() {
console.log('Quş uçur');
}
};
const duck = {
__proto__: animal,
quack() {
console.log('Ördək qaqqıldayır');
}
};
Object.setPrototypeOf(duck, bird);
duck.fly(); // Ekrana çıxacaq: Quş uçur
duck.quack(); // Ekrana çıxacaq: Ördək qaqqıldayır
3.3 Prototiplərlə iş
1. Obyektin prototipini yoxlamaq
Object.getPrototypeOf()
metodu obyektin prototipini əldə etməyə imkan verir.
Nümunə:
const parent = {
greet() {
console.log('Salam parent-dən');
}
};
const child = Object.create(parent);
console.log(Object.getPrototypeOf(child) === parent); // Ekrana çıxacaq: true
2. Obyektin prototipə aid olmasını yoxlamaq
instanceof
operatoru obyektin müəyyən konstruktorun və ya prototipin nümunəsi olub-olmadığını yoxlamaq üçün istifadə olunur.
Nümunə:
function Person(name) {
this.name = name;
}
const john = new Person('John');
console.log(john instanceof Person); // Ekrana çıxacaq: true
3. Obyekt və onun prototipinin xüsusiyyətlərini nəzərdən keçirmək
Obyekt və onun prototipinin xüsusiyyətlərini nəzərdən keçirmək üçün for...in
dövrü istifadə olunur, bu isə bütün sadalanan xüsusiyyətləri göstərir.
Nümunə:
const parent = {
greet() {
console.log('Salam parent-dən');
}
};
const child = Object.create(parent);
child.name = 'Child';
for (let key in child) {
console.log(key);
}
// Ekrana çıxacaq:
// name
// greet
Yalnız obyektin öz xüsusiyyətlərini nəzərdən keçirmək üçün Object.keys()
metodu və ya for...of
dövrü ilə Object.entries()
metodu istifadə olunur.
Nümunə:
const parent = {
greet() {
console.log('Salam parent-dən');
}
};
const child = Object.create(parent);
child.name = 'Child';
console.log(Object.keys(child)); // Ekrana çıxacaq: ['name']
for (const [key, value] of Object.entries(child)) {
console.log(key, value);
}
// Ekrana çıxacaq:
// name Child
GO TO FULL VERSION