Skip to content

JavaScript Sinflarda Vorislik (Inheritance)

Sinflarda vorislik yaratish uchun extends kalit so'zidan foydalaniladi. Voris qilib olingan sinf boshqa sinfning barcha metodlarini meros qilib oladi.


Sinf Vorisligi

Sinfdan meros olish sintaksisi juda sodda:

Misol: "Car" sinfidan meros oluvchi "Model" sinfini yaratish

js
class Car {
  constructor(brand) {
    this.carname = brand
  }
  present() {
    return 'Menda ' + this.carname + ' bor'
  }
}

class Model extends Car {
  constructor(brand, mod) {
    super(brand)
    this.model = mod
  }
  show() {
    return this.present() + ', uning modeli ' + this.model
  }
}

let myCar = new Model('Ford', 'Mustang')
console.log(myCar.show())

super() nima qiladi?

super() metodi ota sinfga (parent class) ishora qiladi. Konstruktor ichida super() ni chaqirish orqali biz ota sinfning konstruktorini ishga tushiramiz va uning xususiyat va metodlariga kirish huquqini olamiz.

Nima uchun kerak?

Vorislik kodni qayta ishlatishda juda qo'l keladi: yangi sinf yaratishda mavjud sinfning xususiyat va metodlaridan foydalanishingiz mumkin.


Getter-lar va Setter-lar (Get va Set)

Sinflar ham obyektlar kabi getter va setter-lardan foydalanish imkonini beradi. Qiymatni qaytarishdan oldin yoki saqlashdan oldin biror amal bajarish kerak bo'lsa, bu juda foydali.

Misol

js
class Car {
  constructor(brand) {
    this._carname = brand
  }
  get carname() {
    return this._carname
  }
  set carname(x) {
    this._carname = x
  }
}

const myCar = new Car('Ford')
myCar.carname = 'Volvo' // Setter chaqiriladi
console.log(myCar.carname) // Getter chaqiriladi
"_" (pastki chiziq) haqida

Ko'pgina dasturchilar haqiqiy xususiyat nomini getter/setter nomidan farqlash uchun uning oldiga pastki chiziq _ qo'yishadi. Bu xususiyatni "ichki" ekanligini bildiradi.


Hoisting (Ko'tarilish)

Funksiyalardan farqli o'laroq, sinf e'lonlari (class declarations) hoisted (yuqoriga ko'tariladigan) emas. Bu degani, siz sinfni ishlatishdan oldin uni e'lon qilishingiz shart.

Xatolik

js
// Bu xatoga olib keladi:
const myCar = new Car('Ford')

class Car {
  constructor(brand) {
    this.carname = brand
  }
}