7.1 Obyekt metodlarının yaradılması
JavaScript-də obyektin metodları funksiyalardır, hansı ki obyektlərlə əlaqələndirilir və bu obyektlər üzərində əməliyyatlar yerinə yetirə bilər. Metodlar obyektlərin öz davranışlarına malik olmasına imkan verir və bu da onları obyekt-oriyentasiya proqramlaşdırmasının vacib hissəsinə çevirir. Aşağıda obyektin metodlarının yaradılması və istifadəsini müzakirə edəcəyik.
Obyekt metodları bir neçə üsulla yaradıla bilər. Əsas üsullara nəzər yetirək.
1. Obyekt literalı
Metodları birbaşa obyekt literalında funksiyalardan istifadə edərək yarada bilərsiniz.
Bu nümunədə person obyekti greet() metoduna malikdir, bu metod obyektin name mülkiyyətindən istifadə edərək bir sətir geri qaytarır:
let person = {
name: 'John',
age: 30,
greet: function() {
return `Salam, mənim adım ${this.name}`;
}
};
console.log(person.greet()); // Çap edəcək: Salam, mənim adım John
2. Metodların qısa yazılışı
ES6-dan etibarən obyekt metodlarının yaradılması üçün qısa yazılış tətbiq olundu.
Bu yazılış kodu daha qısa və oxunaqlı edir:
let person = {
name: 'John',
age: 30,
greet() {
return `Salam, mənim adım ${this.name}`;
}
};
console.log(person.greet()); // Çap edəcək: Salam, mənim adım John
3. Obyekt yaradıldıqdan sonra metodların əlavə edilməsi
Metodları obyekt yaradıldıqdan sonra əlavə etmək mümkündür.
Bu nümunədə greet() metodu person obyektinə yaradıldıqdan sonra əlavə olunur:
let person = {
name: 'John',
age: 30
};
person.greet = function() {
return `Salam, mənim adım ${this.name}`;
};
console.log(person.greet()); // Çap edəcək: Salam, mənim adım John
4. Konstruktor-funksiyadan istifadə
Konstruktor-funksiyası bütün obyekt nümunələri üçün metodların yaradılmasına imkan verir.
Bu nümunədə greet() metodu Person() konstruktor-funksiyasından istifadə edilərək yaradılmış hər bir obyekt nümunəsi üçün yaradılır:
function Person(name, age) {
this.name = name;
this.age = age;
this.greet = function() {
return `Salam, mənim adım ${this.name}`;
};
}
let john = new Person('John', 30);
let jane = new Person('Jane', 25);
console.log(john.greet()); // Çap edəcək: Salam, mənim adım John
console.log(jane.greet()); // Çap edəcək: Salam, mənim adım Jane
7.2 Obyekt metodlarının istifadəsi
1. Nöqtə vasitəsilə metodlara giriş
Obyekt metodlarını nöqtə sintaksisi ilə çağırmaq olar:
let person = {
name: 'John',
age: 30,
greet() {
return `Salam, mənim adım ${this.name}`;
}
};
console.log(person.greet()); // Çap edəcək: Salam, mənim adım John
2. Kvadrat mötərizələr vasitəsilə metodlara giriş
Obyekt metodlarını həmçinin kvadrat mötərizələr vasitəsilə çağırmaq olar:
let person = {
name: 'John',
age: 30,
greet() {
return `Salam, mənim adım ${this.name}`;
}
};
let result = person['greet']();
console.log(result); // Çap edəcək: Salam, mənim adım John
3. Bir metodun başqa bir metodu çağırması
Obyekt metodları həmin obyektin digər metodlarını çağıra bilər.
Bu misalda sum() və mul() metodları setValues() metodu ilə təyin edilmiş dəyərləri istifadə edir:
let calculator = {
a: 0,
b: 0,
setValues(a, b) {
this.a = a;
this.b = b;
},
sum() {
return this.a + this.b;
},
mul() {
return this.a * this.b;
}
};
calculator.setValues(2, 3);
console.log(calculator.sum()); // Çap edəcək: 5
console.log(calculator.mul()); // Çap edəcək: 6
4. Metodlarda this istifadəsi
Metodlarda this açar sözü obyektin özünü göstərir və onun xassələrinə və digər metodlarına müraciət etməyə imkan verir:
let car = {
brand: 'Toyota',
model: 'Camry',
getInfo() {
return `Marka: ${this.brand}, Model: ${this.model}`;
}
};
console.log(car.getInfo()); // Çap edəcək: Marka: Toyota, Model: Camry
5. Metodları callback kimi ötürmək
Obyekt metodları callback olaraq ötürülərkən this-in dəyərini nəzərə almaq vacibdir:
let person = {
name: 'John',
age: 30,
greet() {
console.log(`Salam, mənim adım ${this.name}`);
}
};
setTimeout( person.greet, 1000 ); // Çap edəcək: Salam, mənim adım undefined
Bu misalda greet() metodu setTimeout()-a callback kimi ötürüldüyü zaman this-in dəyəri itir. Nəticədə greet() daxilindəki this qlobal window obyektinə işarə edir. Brauzerlərdə window obyektində name xassəsi mövcuddur və bu, standart olaraq boş sətirdir "". Buna görə də "Salam, mənim adım" çap olunur. this-in düzgün dəyərini saxlamaq üçün bind() metodu istifadə edilə bilər, hansı ki funksiyanı müəyyən bir kontekstə bağlayır:
setTimeout(person.greet.bind(person), 1000); // Çap edəcək: Salam, mənim adım John
Və ya ox funksiyasından istifadə etmək:
setTimeout(() => person.greet(), 1000); // Çap edəcək: Salam, mənim adım John
7.3 Metodların birlikdə istifadəsi
1. Prototiplər vasitəsilə metodların miras alınması
Metodları obyektlərin prototiplərinə əlavə etmək mümkündür ki, onlar bütün nümunələr üçün əlçatan olsun:
function Person(name, age) {
this.name = name;
this.age = age;
}
Person.prototype.greet = function() {
return `Salam, mənim adım ${this.name}`;
};
let john = new Person('John', 30);
let jane = new Person('Jane', 25);
console.log(john.greet()); // Çıxacaq: Salam, mənim adım John
console.log(jane.greet()); // Çıxacaq: Salam, mənim adım Jane
2. Digər obyektlərin metodlarından istifadə
Bir obyektin metodları başqa bir obyekt üçün call() və ya apply() metodlarından istifadə edilərək çağırıla bilər:
let person1 = {
name: 'John',
age: 30,
greet() {
return `Salam, mənim adım ${this.name}`;
}
};
let person2 = {
name: 'Jane',
age: 25
};
console.log(person1.greet.call(person2)); // Çıxacaq: Salam, mənim adım Jane
GO TO FULL VERSION