Sobes.tech
Middle

JavaScriptda ob'ektga yo'naltirilgan dasturlash va boshqa dasturlash tillaridagi OOP o'rtasidagi farq nima?

sobes.tech AI

AIdan javob

JavaScript prototip əsaslı irsiyyət istifadə edir, sinif əsaslı deyil.

Siniflərə əsaslanan obyekt yönümlü dillərdə obyektlər, onların quruluşunu və davranışını təsvir edən siniflərin nümunələridir. İrsiyyət mövcud siniflərin genişləndirilməsi yolu ilə həyata keçirilir.

JavaScript-də ənənəvi mənada siniflər yoxdur. Obyektlər birbaşa və ya digər prototip obyektlər əsasında yaradılır. İrsiyyət, hər obyektin "valideyn" prototipinə istinad etdiyi prototip zənciri vasitəsilə həyata keçirilir. Bir obyektin xüsusiyyəti və ya metodu üzərinə müraciət edildikdə, JavaScript əvvəlcə onu obyektin özündə, sonra onun prototipində, sonra prototipin prototipində axtarır və zəncir boyunca davam edir.

JavaScript-də obyekt və irsiyyət nümunəsi:

// Prototip obyektin yaradılması
const animal = {
  speak() {
    console.log('Ümumi səs');
  }
};

// Prototip əsasında obyektin yaradılması
const dog = Object.create(animal);

// Yeni obyekt üçün metodu yenidən təyin etmək
dog.speak = function() {
  console.log('Hav!');
};

dog.speak(); // "Hav!" göstərəcək

Sinif əsaslı və prototip əsaslı OOP-in müqayisəsi:

Xüsusiyyət Sinif əsaslı OOP (Java, C++) Prototip əsaslı OOP (JavaScript)
Əsas mexanizm Siniflər və nümunələr Obyektlər və prototiplər
İrsiyyət 'extends' ilə sinif irsiyyəti Prototip zənciri vasitəsilə irsiyyət
Obyekt yaradılması 'new' açar sözü və konstruktorlar Birbaşa, Object.create(), konstruktorlar (funksiyalar)
Polimorfizm Sinifdə metodların yenidən təyin olunması Obyektlərdə xüsusiyyət və metodların yenidən təyin olunması
İnkişaf Əlçatanlıq modifikatorları (public, private, protected) Konvensiyalar və bağlamalar (closures)

ECMAScript 2015 (ES6) ilə siniflərin əlavə olunması, prototip irsiyyət üzərində sintaktik şəkər təmin etdi və JavaScript-də OOP-nin sinif əsaslı dillərə daha çox bənzəməsinə imkan verdi, lakin əsas mexanizm prototip olaraq qalır.

// ES6-də sinif istifadəsi nümunəsi
class Animal {
  speak() {
    console.log('Ümumi səs');
  }
}

class Dog extends Animal {
  speak() {
    console.log('Woof!');
  }
}

const myDog = new Dog();
myDog.speak(); // "Woof!" göstərəcək