25 август 2025

Obyekt usullari, "this"

Obyektlar odatda foydalanuvchilar, buyurtmalar va boshqalar kabi real dunyo subyektlarini aks ettirish uchun yaratiladi:

let user = {
  name: "John",
  age: 30,
};

Va, haqiqiy dunyoda, foydalanuvchi harakat qilishi mumkin: xarid qilish vositasidan biror narsani tanlash, kirish, chiqish va hk.

Amallar JavaScript-da funktsiyadagi xususiyatlar bilan ifodalanadi.

Usul misollari

Boshlash uchun user ga salom aytishni o’rgataylik:

let user = {
  name: "John",
  age: 30
};

user.sayHi = function() {
  alert("Salom!");
};

user.sayHi(); // Salom!

Bu yerda biz funktsiyani yaratish va uni obyektning user.sayHi xususiyatiga tayinlash uchun funktsiya ifodasini ishlatdik.

Keyin biz uni chaqira olamiz. Endi “user” gaplasha oladi!

Obyektning xususiyati bo’lgan funktsiya uning usuli deb nomlanadi.

Shunday qilib, bu yerda bizda user obyektining sayHi usuli bor.

Albatta, biz oldindan e’lon qilingan funktsiyalardan usul sifatida foydalanishimiz mumkin:

let user = {
  // ...
};

// birinchi, e'lon qiling
function sayHi() {
  alert("Hello!");
};

// keyin usul sifatida qo'shing
user.sayHi = sayHi;

user.sayHi(); // Salom!
Obyektga yo’naltirilgan dasturlash

Subyektlarni namoyish qilish uchun obyektlar yordamida kodimizni yozganimizda, bu obyektga yo’naltirilgan dasturlash, qisqasi: “OOP”.

OOP – bu katta narsa, o’ziga xos qiziqarli fan. To’g’ri subyektlarni qanday tanlash kerak? Ularning o’zaro ta’sirini qanday tashkil qilish kerak? Bu arxitektura va bu mavzu bo’yicha E.Gamma, R.Helm, R.Jonson, J.Vissidesning “Dizayn naqshlari: qayta ishlatilishi mumkin bo’lgan obyektga yo’naltirilgan dasturiy ta’minot elementlari” yoki “Obyektga yo’naltirilgan tahlil va dizayn ilovalar” G.Booch tomonidan yozilgan va boshqalar.

Usulni qisqartirish

Obyektdagi usullar uchun qisqa sintaksis mavjud:

// bu obyektlar ham xuddi shunday qiladi

user = {
  sayHi: function() {
    alert("Salom");
  }
};

// usulni qisqartirish yaxshiroq ko'rinadi, to'g'rimi?
let user = {
  sayHi() { // "sayHi: function()" bilan bir xil
    alert("Salom");
  }
};

Ko’rsatilganidek, biz "function" ni qoldirib, faqat sayHi() yozishimiz mumkin.

Rostini aytsam, yozuvlar bir-biriga to’liq o’xshash emas. Obyektni meros qilib olish bilan bog’liq nozik farqlar mavjud (keyinroq ko’rib chiqiladi), ammo hozircha ularning ahamiyati yo’q. Deyarli barcha hollarda qisqa sintaksisga ustunlik beriladi.

“this” usullarda

Obyekt usuli o’z ishini bajarish uchun obyektda saqlangan ma’lumotlarga kirish huquqiga ega bo’lishi odatiy holdir.

Masalan, user.sayHi() ichidagi kodga user nomi kerak bo’lishi mumkin.

Obyektga kirish uchun usul this kalit so’zidan foydalanishi mumkin.

this qiymati – bu usulni chaqirish uchun ishlatiladigan “nuqta oldidagi” obyekt.

Masalan:

let user = {
  name: "John",
  age: 30,

  sayHi() {
    // "this" is the "current object"
    alert(this.name);
  }

};

user.sayHi(); // John

Bu erda user.sayHi() bajarilishi paytida this qiymati user bo’ladi.

Texnik jihatdan, this kalit so’zisiz obyektga murojaat qilish mumkin, unga tashqi o’zgaruvchan orqali murojaat qilish mumkin.