Klasslar

Statik xossa va metodlar

Metodni obyektning emas, balki klassning o'ziga (funksiyasiga) biriktirish mumkin. Bunday metodlar statik (static) deb ataladi.

Statik metodlar

Statik metod static kalit so'zi bilan e'lon qilinadi. U klass obyektlariga emas, balki klassning o'ziga tegishli bo'ladi:

static-basic.js
// natija shu yerda chiqadi

Bu aslida quyidagini yozishga teng:

class User {}
User.staticMethod = function() {
  return "...";
};

Statik metod ichidagi this โ€” bu klassning o'zi (konstruktor funksiya). Odatda statik metodlar obyektlar ustida emas, balki butun klass darajasida ishlaydigan mantiq uchun ishlatiladi.

Statik metodni obyekt orqali chaqira olmaysiz. Masalan, new User().staticMethod() xato beradi (is not a function), chunki statik metod obyektda emas, klassdadir.

Amaliy misol: taqqoslash

Statik metodlar ko'pincha obyektlarni taqqoslash yoki ular ustida umumiy amallar bajarish uchun ishlatiladi. Masalan, maqolalarni sanasi bo'yicha saralaymiz:

static-compare.js
// natija shu yerda chiqadi

Bu yerda Article.compare maqolalar "ustidagi" umumiy vosita โ€” bir maqolaga tegishli emas, shuning uchun uni statik qilish mantiqiy.

Factory (fabrika) metodlar

Yana bir keng tarqalgan qo'llanish โ€” obyekt yaratishning turli usullarini beruvchi factory metod. Masalan, maqolani bugungi sana bilan yaratuvchi metod:

static-factory.js
// natija shu yerda chiqadi

Endi "bugungi maqola" kerak bo'lganda, har safar sana yaratish o'rniga Article.createTodays()ni chaqirsak yetarli. Bu yerda this โ€” Article klassi, shuning uchun new this(...) to'g'ri klassni yaratadi.

Statik xossalar

Statik xossalar ham mavjud โ€” ular oddiy klass xossalariga o'xshaydi, faqat oldiga static qo'yiladi:

static-property.js
// natija shu yerda chiqadi

Bu quyidagini yozishga teng: Article.publisher = "Ilim Nashriyoti". Statik xossa butun klassga tegishli bo'lgan qiymatlarni (masalan, umumiy sozlamalar yoki hisoblagichlar) saqlash uchun qulay.

static-counter.js
// natija shu yerda chiqadi

Statik xossa va metodlar merosi

Statik xossa va metodlar ham meros olinadi! Bu extendsning muhim xususiyati. Ya'ni Rabbit extends Animal qilinganda, Rabbit nafaqat oddiy metodlarni, balki statik metodlarni ham oladi:

static-inherit.js
// natija shu yerda chiqadi

Bu qanday ishlaydi? extends ikkita prototip bog'lanishini o'rnatadi:

static-inherit-proto.js
// natija shu yerda chiqadi
Statik metodlar butun klass bilan bog'liq bo'lgan, aniq bir obyektga bog'lanmagan funksiyalar uchun ishlatiladi. Masalan, Object.keys(...), Array.from(...) โ€” bular ham statik metodlardir.

Xulosa