JavaScript-də irsiyyətin necə işlədiyini izah edin.
sobes.tech Süni İntellekt
AI-dan cavab
JavaScript-də irsiyyət prototiplər vasitəsilə həyata keçirilir. JavaScript-də hər bir obyektin daxili [[Prototype]] xüsusiyyəti var və bu, başqa bir obyektə istinad edir. Bir obyektin birbaşa özündə olmayan xüsusiyyət və ya metoduna daxil olmaq istədikdə, JavaScript mühərriki bu xüsusiyyət və ya metodu həmin obyektin prototipində axtarır. Əgər tapmazsa, prototiplər zənciri boyunca axtarış davam edir və null-a (zəncirin sonu) çatana qədər davam edir.
İrsiyyətin iki əsas mexanizmi mövcuddur:
-
Klassik prototip irsiyyəti (ES5 və əvvəlki): Bu, funksiyalar-constructors və onların
prototypexüsusiyyəti istifadə edilərək həyata keçirilir.// Constructor funksiyası function Heyvan(ad) { this.ad = ad; } // Prototipə metod əlavə et Heyvan.prototype.söhbət = function() { console.log(`${this.ad} səs çıxarır.`); }; // Nümunə yaradılır const it = new Heyvan('İt'); // Prototipdən metodu çağırırıq it.söhbət(); // Çıxış: İt səs çıxarır. // `dog`-un prototipi `Heyvan.prototype`-dir console.log(Object.getPrototypeOf(it) === Heyvan.prototype); // true -
Klass irsiyyəti (ES6 və sonrası): Bu,
classvəextendssintaksisindən istifadə edir və alt qatda prototiplərlə işləyir.// Əsas sinif class Heyvan { constructor(ad) { this.ad = ad; } söhbət() { console.log(`${this.ad} səs çıxarır.`); } } // Alt sinif, Heyvan-dan irs alır class İt extends Heyvan { constructor(ad, cinslər) { super(ad); // Ata sinifin konstruktorunu çağırır this.cinslər = cinslər; } havlama() { console.log(`${this.ad} havlayır.`); } } // Alt sinif nümunəsi yaradılır const mənimİtim = new İt('Bublik', ['Labrador', 'Collie']); // Hem Heyvan, hem də İt metodlarını çağırırıq mənimİtim.söhbət(); // Çıxış: Bublik səs çıxarır. mənimİtim.havlama(); // Çıxış: Bublik havlayır. // `mənimİtim`-in prototipi `İt.prototype`-dir console.log(Object.getPrototypeOf(mənimİtim) === İt.prototype); // true // `İt.prototype`-in prototipi `Heyvan.prototype`-dir console.log(Object.getPrototypeOf(İt.prototype) === Heyvan.prototype); // true
Əsas anlayışlar:
-
Prototip zənciri: Obyektlər arasındakı əlaqə
[[Prototype]]vasitəsilə. -
__proto__(köhnə/standart olmayan, amma anlama üçün faydalı):[[Prototype]]-ə giriş üçün istifadə olunur. İstehsal kodunda istifadə etmək tövsiyə edilmir. -
Object.getPrototypeOf(obj): Obyektin prototipini almaq üçün standart üsul. -
Object.setPrototypeOf(obj, proto): Obyektin prototipini dəyişmək üçün standart üsul (mövcud obyektlərin prototipini dəyişmək üçün tövsiyə edilmir). -
instanceof: Obyektin sinif və ya konstruktor funksiyasının nümunəsi olub-olmadığını yoxlamaq üçün istifadə olunur.console.log(mənimİtim instanceof İt); // true console.log(mənimİtim instanceof Heyvan); // true console.log(mənimİtim instanceof Object); // true (zəncirin sonunda Object.prototype) -
super: Siniflərdə valideyn sinifin metod və ya konstruktorunu çağırmaq üçün istifadə olunur.
Klassik və klasssız yanaşma arasındakı fərq: Klasslar, prototip irsiyyət ilə işləmək üçün daha strukturlaşdırılmış və sintaktik olaraq rahat bir yol təqdim edir, digər proqramlaşdırma dillərinə yaxınlaşır. Ancaq əsas mexanizm eyni qalır — prototiplər vasitəsilə irsiyyət.