8.1 call Metodu
JavaScript-də call
, bind
və apply
metodları funksiyaların icra kontekstinə nəzarət etməkdə əsas rol oynayır. Bu metodlar funksiyalar çağırılarkən this
dəyərini təyin etməyə imkan verir. Xüsusilə obyektlər və funksional proqramlaşdırma ilə işləyərkən bu metodlar kod üzərində çevik idarəetmə üçün güclü vasitələr təqdim edir. Gəlin hər biri ilə daha ətraflı tanış olaq və istifadə nümunələrini araşdıraq.
call
metodu funksiyanı verilmiş this
dəyəri və vergüllə ayrılmış arqumentlər ilə çağırır. Bu, funksiyanın hansı kontekstdə icra olunacağını dəqiq təyin etməyə imkan verir.
Syntax:
func.call(thisArg, arg1, arg2 ...);
Nümunə:
Bu nümunədə greet
funksiyası person
konteksti ilə çağırılır, bu isə ona person
obyektinin name
xüsusiyyətindən istifadə etməyə imkan verir.
function greet(greeting, punctuation) {
console.log(greeting + ', ' + this.name + punctuation);
}
const person = { name: 'John' };
greet.call(person, 'Salam', '!'); // Output: Salam, John!
8.2 Apply metodu
apply
metodu call
ilə oxşardır, amma arqumentləri massiv şəklində ötürür. Bu, bizdə bir funksiyaya ötürmək istədiyimiz arqumentlərdən ibarət massiv olanda, rahatdır.
Sintaksis:
func.apply(thisArg, [argsArray]);
Nümunə:
Bu nümunə əvvəlki ilə eynidir, amma arqumentlər massiv kimi ötürülür.
function greet(greeting, punctuation) {
console.log(greeting + ', ' + this.name + punctuation);
}
const person = { name: 'John' };
greet.apply(person, ['Salam', '!']); // Çıxış: Salam, John!
8.3 Bind metodu
bind
metodu, çağırıldıqda müəyyən edilmiş this
dəyərini təyin edən yeni bir funksiya yaradır. bind
içində ötürülən arqumentlər yeni funksiya üçün sabit olaraq qalır. Bu, sabit kontekstə malik funksiyalar yaratmağa imkan verir.
Sintaksis:
const boundFunc = func.bind(thisArg, arg1, arg2 ...);
Nümunə:
Bu nümunədə boundGreet
adlanan yeni bir funksiya yaradılır, və bu funksiya həmişə person
obyektinin kontekstində icra olunacaq.
function greet(greeting, punctuation) {
console.log(greeting + ', ' + this.name + punctuation);
}
const person = { name: 'John' };
const boundGreet = greet.bind(person, 'Salam');
boundGreet('!'); // Çıxış: Salam, John!
8.4 Metodların istifadəsinin ətraflı izahı
1. call metodu ilə metodların miras alınması:
call
metodu tez-tez bir obyektin metodlarını digər obyektə miras almaq üçün istifadə olunur. Bu, metodları və xassələri açıq-açıq miras almaq ehtiyacı olmadan borclanmağa imkan verir.
Bu nümunədə Product
konstruktoru Food
obyektinin kontekstində çağırılır, bu da name
və price
xassələrini miras almağa imkan yaradır.
function Product(name, price) {
this.name = name;
this.price = price;
}
function Food(name, price, category) {
Product.call(this, name, price);
this.category = category;
}
const cheese = new Food('Cheese', 5, 'Dairy');
console.log(cheese); // Çıxış: Food { name: 'Cheese', price: 5, category: 'Dairy' }
2. apply metodu ilə arqumentlər massivinin ötürülməsi:
apply
metodu, ayrı-ayrı parametrləri qəbul edən funksiya üçün arqumentlər massivini ötürmək istəyərkən çox rahatdır.
Bu halda, numbers
massivindəki dəyərlər sum
funksiyasına ayrı-ayrılıqda arqument kimi ötürülür.
function sum(a, b, c) {
return a + b + c;
}
const numbers = [1, 2, 3];
console.log(sum.apply(null, numbers)); // Çıxış: 6
3. bind metodu ilə sabit kontekstli funksiyanın yaradılması:
bind
metodu sabit konteksti olan funksiyalar yaratmağa imkan verir, bu xüsusilə hadisələr və geriyə çağırışlarla işləyərkən çox faydalıdır.
Burada getX
funksiyası module
obyekti ilə bind
vasitəsilə birləşdirilir, bu da funksiyanı çağırdıqda doğru x dəyərini almağa imkan verir.
const module = {
x: 42,
getX: function() {
return this.x;
}
};
const unboundGetX = module.getX;
console.log(unboundGetX()); // Çıxış: undefined
const boundGetX = unboundGetX.bind(module);
console.log(boundGetX()); // Çıxış: 42
8.5 Real həyatdan nümunələr
Metod call-un array metodunu borc almaqda istifadəsinə nümunə:
Bu nümunədə forEach
array metodu, arguments
obyektinə call
vasitəsilə tətbiq edilir.
function printArguments() {
Array.prototype.forEach.call(arguments, function(item) {
console.log(item);
});
}
printArguments(1, 2, 3); // Çıxış: 1, 2, 3
Metod apply-un array-lərin birləşdirilməsində istifadəsinə nümunə:
Burada push
metodu, iki array-i birləşdirmək üçün apply
vasitəsilə istifadə olunur.
const array1 = [1, 2, 3];
const array2 = [4, 5, 6];
Array.prototype.push.apply(array1, array2);
console.log(array1); // Çıxış: [1, 2, 3, 4, 5, 6]
Metod bind-un qismən funksiya yaratmaqda istifadəsinə nümunə:
double
funksiyası, birinci arqumenti 2 olaraq fiksasiya etməklə bind
vasitəsilə yaradılır.
function multiply(a, b) {
return a * b;
}
const double = multiply.bind(null, 2);
console.log(double(5)); // Çıxış: 10
GO TO FULL VERSION