Sobes.tech
Junior

JavaScript-də irsiyyətin necə işlədiyini izah edin.

sobes.tech Süni İntellekt

AI-dan cavab

JavaScript-də irsiyyət prototiplər əsasında qurulub. Hər bir obyektin daxili xüsusiyyəti [[Prototype]] (bu __proto__ və ya Object.getPrototypeOf() vasitəsilə əldə edilə bilər) mövcuddur və başqa bir obyektə işarə edir.

Obyektin xüsusiyyəti və ya metoduna daxil olmağa çalışarkən, əgər obyektin daxilində tapılmırsa, JavaScript onu [[Prototype]]-də axtarır, sonra prototipin [[Prototype]]-ində və beləliklə prototip zəncirində yuxarı doğru davam edir, sona çatana qədər (Object.prototype), onun [[Prototype]] isə null-dur.

Bu, prototip əsaslı irsiyyətdir.

ECMAScript 2015 (ES6) sinifləri prototip irsiyyətinin sintaktik şəkəridir. Onlar prototiplərlə işləmək və obyekt hiyerarşiləri yaratmaq üçün daha tanış sintaksis təmin edir.

ES6-dan əvvəl prototip irsiyyətinin istifadəsinə nümunə:

// Valideyn konstruktoru
function Animal(name) {
  this.name = name;
}

// Valideynin prototipində metod
Animal.prototype.sayHi = function() {
  console.log(`Salam, mən ${this.name}`);
};

// Uşaq konstruktoru
function Dog(name, breed) {
  // Valideyn konstruktorunu çağır
  Animal.call(this, name);
  this.breed = breed;
}

// Uşaq prototipini valideynin prototipinə qur
// Dog konstruktorunun referansını saxla
Dog.prototype = Object.create(Animal.prototype);
Dog.prototype.constructor = Dog;

// Uşağa metod əlavə et
Dog.prototype.bark = function() {
  console.log("Hav-hav!");
};

// Uşaq nümunəsi yaradın
const myDog = new Dog("Boby", "Labrador");

// Valideyn və uşaq metodlarından istifadə
myDog.sayHi(); // Çıxış: Salam, mən Boby
myDog.bark();  // Çıxış: Hav-hav!

ES6 siniflərindən istifadə nümunəsi:

// Valideyn sinfi
class Animal {
  constructor(name) {
    this.name = name;
  }

  sayHi() {
    console.log(`Salam, mən ${this.name}`);
  }
}

// Animal-dən irsi alan uşaq sinfi
class Dog extends Animal {
  constructor(name, breed) {
    // Valideynin konstruktorunu çağır
    super(name);
    this.breed = breed;
  }

  bark() {
    console.log("Hav-hav!");
  }
}

// Uşaq sinfinin nümunəsini yaradın
const myDog = new Dog("Rex", "Alman çoban iti");

// Valideyn və uşaq metodlarından istifadə
myDog.sayHi(); // Çıxış: Salam, mən Rex
myDog.bark();  // Çıxış: Hav-hav!

JavaScript-də irsiyyətin əsas nöqtələri:

  • Prototiplər: Hər obyektin prototipi var.
  • Prototip zənciri: Xüsusiyyət və ya metod axtarışı yuxarıya doğru prototiplər boyunca davam edir.
  • [[Prototype]]: Prototipə işarə edən daxili xüsusiyyət.
  • __proto__: [[Prototype]]-ə giriş üçün köhnə, amma geniş istifadə olunan üsul.
  • Object.getPrototypeOf(): [[Prototype]]-ə giriş üçün tövsiyə olunan üsul.
  • Konstruktorlar və prototype: ES6-dan əvvəl obyektlər yaratmaq və onların prototiplərini təyin etmək üçün istifadə olunurdu.
  • Siniflər (ES6): class, extends, super açar sözləri ilə prototip irsiyyətinin sintaktik şəkəridir.