Assalomu alaykum, bugungi maqolamiz JavaScript Class lari haqida bo'ladi.
JavaScriptda class ob'yekt yaratish uchun mo'ljallangan. Bunda class ob'yekt malumotlari va funksiyalarini o'z ichiga oladi. Boshqa dasturlash tillaridan farqli ravishda JavaScriptda class prototipli vorislikka asoslangan maxsus funksiya hisoblanadi.
ES6 dan oldin
ES6 dan oldin JS da class tushunchasi bo'lmagan.Biz bilgan class ni yaratish uchun constructor va prototype dan foydalanilgan.
function Person(name) {
this.name = name;
}
Person.prototype.getName = function () {
return this.name;
};
var ali = new Person("Ali Valiyev");
console.log(ali.getName());
Natija:
Ali Valiyev
Endi yuqoridagi kodning qanday ishlashini tushuntiraman.
Dastlab, name
xususiyatiga ega Person
konstruktor funksiyasi yaratildi. prototype
ga getName() funksiyasi biriktirildi, endi bu funksiyani Person
class ishlatilgan barcha holatlarda ishlatishimiz mumkin.
Keyin esa new
operatori yordamida Person
klassidan namuna oldik. ali
ob'yekti prototipli vorislik orqali Person
va Object
klasslaridan namuna olganligi uchun endi ularning barcha xususiyatlaridan foydalana oladi.
console.log(john instanceof Person); // true
console.log(john instanceof Object); // true
Es6 da class ning e'lon qilinishi
ES6 da class larni e'lon qilish uchun yangi sintaksis yaratildi. Yuqoridagi funksiya konstruktori yordamida yaratilgan class yangi sintaksisda quyidagicha yoziladi.
class Person {
constructor(name) {
this.name = name;
}
getName() {
return this.name;
}
}
Person
klassidagi construtor()
ichida olinadigan namunaning xususiyatlari e'lon qilinadi va new
operatori orqali klassdan namuna olinganda JavaScript avtomatik ravishda constructor()
ni chaqiradi.
let ali = new Person("Ali Valiyev");
Person
klassidagi getName()
metod deb ataladi va bunday qo'llaniladi.
obyektNomi.metodNomi()
Misol uchun
let name = ali.getName();
console.log(name); // "Ali Valiyev"
Biz yuqorida class
ni maxsus funksiya dedik, buning isbotini ko'rish uchun Person
klassining tipini typeof
operatori orqali tekshiramiz.
console.log(typeof Person); // function
Class va funksiya konstruktori
Class va funksiya konstruktori orasida o'xshashlik bo'lishiga qaramasdan, ularda farqlanadigan muhim jihatlar bor.
Birinchi, class e'lon qilinganda funksiyaga o'xshab hoisting
ga uchramaydi.
Misol uchun, quyidagi kodni Person
klassi e'lon qilinishidan oldin yozsak, natija sifatida ReferenceError
ega bo'lamiz.
let ali = new Person("Ali Valiyev");
Xatolik
Uncaught ReferenceError: Person is not defined
Ikkinchi, class ichidagi barcha kodlar avtomatik ravishda strict mode
da ishlaydi.
Uchinchi, class metodlari non enumerable
, ya'ni sanalmaydi(ular bilan for ... in
va Object.keys()
ni ishlata olmaymiz). Funksiya konstruktorida esa ob'yekt xususiyatlarini non enumerable
qilish uchun Object.defineProperty()
metodidan foydalanishimizga to'g'ri keladi.
Va oxirigisi, class konstruktorini new
operatorisiz ishlatsak, xatolik beradi.
let ali = Person("Ali Valiyev");
Xatolik
Uncaught TypeError: Class constructor Person cannot be invoked without 'new'
Xulosa
- class yaratish uchun
class
kalit so'zini ishlatamiz. - class prototipli vorislikka asoslangan va kuchaytirilgan maxsus funksiya.
Foydali bo'lgan bo'lsa ulashing )
Top comments (0)