Sinflarda vorislik


ULASHISH

Klass vorisligi

Klass merosini yaratish uchun extends kalit so‘zidan foydalaning.

Class merosi bilan yaratilgan class boshqa sinfdan barcha usullarni meros qilib oladi:

Misol

"Car" klassidan metodlarni meros qilib oladigan "Model" nomli klass yarating:

class Car {
  constructor(brand) {
    this.carname = brand;
  }
  present() {
    return 'I have a ' + this.carname;
  }
}

class Model extends Car {
  constructor(brand, mod) {
    super(brand);
    this.model = mod;
  }
  show() {
    return this.present() + ', it is a ' + this.model;
  }
}

let myCar = new Model("Ford", "Mustang");
document.getElementById("demo").innerHTML = myCar.show();

O‘zingiz sinab ko‘ring »

super() usuli ota-onaga tegishli class.

super() usulini chaqirish orqali konstruktor usuli, biz ota-onaning konstruktor usulini chaqiramiz va unga kirish huquqiga ega bo‘lamiz ota-onaning xususiyatlari va metodlari.

Meroslash kodni qayta ishlatish uchun foydalidir: yangi class yaratishda mavjud sinfning xususiyatlari va usullarini qayta ishlating.


Getter va setterlar

Sinflar, shuningdek, oluvchilar va o‘rnatuvchilardan foydalanishga imkon beradi.

Xususiyatlaringiz uchun qabul qiluvchilar va sozlagichlardan foydalanish oqilona bo‘lishi mumkin, ayniqsa ularni qaytarishdan oldin yoki ularni o‘rnatishdan oldin qiymat bilan maxsus biror narsa qilishni istasangiz.

Sinfga qabul qiluvchilar va sozlagichlarni qo‘shish uchun get va set kalit so‘zlaridan foydalaning.

Misol

"carname" xususiyati uchun getter va setter yarating:

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

const myCar = new Car("Ford");

document.getElementById("demo").innerHTML = myCar.cnam;

O‘zingiz sinab ko‘ring »

Eslatma: agar qabul qiluvchi usul bo‘lsa ham, xususiyat qiymatini olishni xohlaganingizda qavslardan foydalanmaysiz.

Getter/setter usulining nomi xususiyat nomi bilan bir xil bo‘lishi mumkin emas, bu holda carname.

Ko‘pgina dasturchilar qabul qiluvchi/setterni haqiqiy xususiyatdan ajratish uchun xususiyat nomidan oldin _ pastki chiziq belgisidan foydalanadilar:

Misol

Qabul qiluvchi/setterni haqiqiy xususiyatdan ajratish uchun pastki chiziq belgisidan foydalanishingiz mumkin:

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

const myCar = new Car("Ford");

document.getElementById("demo").innerHTML = myCar.carname;

O‘zingiz sinab ko‘ring »

Sozlagichdan foydalanish uchun qavslarsiz xususiyat qiymatini o‘rnatganingizdek bir xil sintaksisdan foydalaning:

Misol

Avtomobil nomini "Volvo" ga o‘zgartirish uchun sozlash moslamasidan foydalaning:

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";
document.getElementById("demo").innerHTML = myCar.carname;

O‘zingiz sinab ko‘ring »


Ko‘tarish (Hoisting)

Funksiyalar va boshqa JavaScript deklaratsiyasidan farqli o‘laroq, class deklaratsiyasi ko‘tarilmaydi.

Bu shuni anglatadiki, siz undan foydalanishdan oldin sinfni e’lon qilishingiz kerak:

Misol

//You cannot use the class yet.
//myCar = new Car("Ford") will raise an error.

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

//Now you can use the class:
const myCar = new Car("Ford")
O‘zingiz sinab ko‘ring »
Eslatma: Funksiyalar kabi boshqa deklaratsiyalar uchun uni e’lon qilinishidan oldin ishlatmoqchi bo‘lganingizda xato EMAS, chunki JavaScript deklaratsiyasining standart xatti-harakati ko‘tariladi (deklaratsiyani yuqoriga ko‘chirish).

W3Schools Pathfinder

Yutuqlaringizni kuzating – bu bepul!