در جاوا اسکریپت، متد apply()

در جاوا اسکریپت، متد apply()
در اشیای تابع (Function.prototype.apply
) برای فراخوانی یک تابع با یک کانتکست (context) مشخص و یک آرایه از آرگومانها استفاده میشود. این متد شبیه به call()
عمل میکند، اما تفاوت اصلی این است که apply()
آرگومانها را بهصورت یک آرایه یا آرایهمانند (Array-like) دریافت میکند، در حالی که call()
آرگومانها را بهصورت جداگانه میگیرد.
سینتکس apply()
func.apply(thisArg, [argsArray])
پارامترها:
thisArg
: مقداری که بهعنوانthis
در داخل تابع تنظیم میشود.argsArray
: یک آرایه یا یک شیء آرایهمانند (array-like object
) که شامل آرگومانهای تابع است.
مثالها
۱. استفاده از apply()
برای تنظیم this
const person = {
name: “Ali”
};
function greet(greeting, punctuation) {
console.log(greeting + “, “ + this.name + punctuation);
}
greet.apply(person, [“سلام”, “!”]);
خروجی:
سلام, Ali!
🔹 در این مثال، this
در داخل تابع greet
به شیء person
تنظیم شده است.
۲. استفاده از apply()
برای یافتن مقدار بیشترین و کمترین عدد
متد Math.max()
و Math.min()
میتوانند با apply()
برای یافتن مقدار بیشینه یا کمینه در یک آرایه استفاده شوند.
const numbers = [10, 5, 8, 20, 3];
const maxNumber = Math.max.apply(null, numbers);
const minNumber = Math.min.apply(null, numbers);
console.log(“Max:”, maxNumber); // Max: 20
console.log(“Min:”, minNumber); // Min: 3
🔹 مقدار thisArg
برابر null
تنظیم شده است زیرا Math.max
نیازی به مقدار this
ندارد.
۳. استفاده از apply()
برای تبدیل arguments
به آرایه
در توابع معمولی، arguments
یک شیء آرایهمانند است. با apply()
میتوان آن را به یک آرایه واقعی تبدیل کرد:
function sum() {
return Array.prototype.reduce.apply(arguments, [(a, b) => a + b]);
}
console.log(sum(1, 2, 3, 4, 5)); // 15
🔹 در اینجا، apply()
کمک میکند که arguments
به آرایه تبدیل شود و متد reduce()
روی آن اجرا شود.
۴. تفاوت apply()
و call()
متد apply()
و call()
هر دو برای تغییر مقدار this
و ارسال آرگومانها استفاده میشوند، اما تفاوت اصلی در نحوه ارسال آرگومانها است:
function introduce(name, age) {
console.log(`My name is ${name} and I am ${age} years old.`);
}
introduce.call(null, “Sara”, 30); // استفاده از `call()` با آرگومانهای مجزا
introduce.apply(null, [“Sara”, 30]); // استفاده از `apply()` با آرایه از آرگومانها
خروجی:
My name is Sara and I am 30 years old.
My name is Sara and I am 30 years old.
🔹 call()
آرگومانها را بهصورت جداگانه دریافت میکند، در حالی که apply()
آنها را در قالب یک آرایه دریافت میکند.
۵. استفاده از apply()
برای ارثبری از متدهای شیء دیگر
const car = {
brand: “Tesla”,
getInfo: function(speed) {
console.log(`${this.brand} is moving at ${speed} km/h`);
}
};
const bike = { brand: “Yamaha” };
car.getInfo.apply(bike, [120]);
خروجی:
Yamaha is moving at 120 km/h
🔹 در اینجا متد getInfo()
متعلق به car
برای bike
استفاده شده است.
جمعبندی
✅ apply()
وقتی استفاده میشود که میخواهیم یک تابع را با یک مقدار this
مشخص و یک آرایه از آرگومانها اجرا کنیم.
✅ تفاوت آن با call()
این است که call()
آرگومانها را بهصورت مجزا دریافت میکند، اما apply()
یک آرایه از آرگومانها را میگیرد.
✅ از apply()
میتوان برای اعمال متدهای ریاضی (Math.max
, Math.min
)، تبدیل arguments
به آرایه و استفاده مجدد از متدهای اشیای دیگر بهره برد.
❓ آیا مثال یا توضیح بیشتری نیاز دارید؟ 😊
دیدگاهتان را بنویسید