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:
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.
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:
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:
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:
Bu quyidagini yozishga teng: Article.publisher = "Ilim Nashriyoti". Statik xossa butun klassga tegishli bo'lgan qiymatlarni (masalan, umumiy sozlamalar yoki hisoblagichlar) saqlash uchun qulay.
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:
Bu qanday ishlaydi? extends ikkita prototip bog'lanishini o'rnatadi:
Rabbit.prototype.[[Prototype]]โAnimal.prototypega (oddiy metodlar uchun);Rabbit.[[Prototype]]โAnimalga (statik metodlar uchun).
Object.keys(...), Array.from(...) โ bular ham statik metodlardir.Xulosa
- Statik metodlar
staticbilan e'lon qilinadi va klassning o'zida chaqiriladi (obyektda emas); - Ular ichidagi
thisโ klassning o'zi; - Statik metodlar taqqoslash va factory (obyekt yaratish) mantiqi uchun qulay;
- Statik xossalar butun klassga tegishli qiymatlarni saqlaydi;
- Statik xossa va metodlar ham
extendsorqali meros olinadi.