apply (Function Apply)
«تابع apply» مثل call است؛ اما آرگومان ها را «به صورت آرایه» می گیرد. پس با apply می توانیم متد یک شیء را برای شیء دیگر اجرا کنیم و this را دقیق تنظیم کنیم.
بازاستفاده متد با apply()
متد را یک بار تعریف کن؛ سپس روی شیء دیگر «اعمال» کن. کلید ماجرا، تعیین this است.
const person = {
fullName: function () {
return this.firstName + " " + this.lastName;
}
};
const person1 = {
firstName: "Mary",
lastName: "Doe"
};
person.fullName.apply(person1);
تفاوت call و apply
call آرگومان ها را جدا می گیرد. اما apply آرگومان ها را داخل آرایه می گیرد. هر دو this را تعیین می کنند.
const person = {
fullName: function (city, country) {
return this.firstName + " " + this.lastName + "," + city + "," + country;
}
};
const person1 = {
firstName: "John",
lastName: "Doe"
};
person.fullName.apply(person1, ["Oslo", "Norway"]);
همین مثال با call؛ می بینی آرگومان ها جدا هستند.
const person = {
fullName: function (city, country) {
return this.firstName + " " + this.lastName + "," + city + "," + country;
}
};
const person1 = {
firstName: "John",
lastName: "Doe"
};
person.fullName.call(person1, "Oslo", "Norway");
کاربرد سریع: بیشینه در آرایه
Math.max لیست می گیرد؛ آرایه نه. با apply آرایه را تبدیل کن.
Math.max(1, 2, 3);
Math.max.apply(null, [1, 2, 3]);
نکات حالت strict
در strict، اگر آرگومان اول apply شیء نباشد، صاحب تابع می شود. در حالت عادی، سراسری می شود.
نکته: برای مرور this به this در تابع برو. همچنین ادامه مبحث را در bind ببین. برای مرور call اینجا call را بخوان.
گام های تمرینی
- یک متد با استفاده از this بساز.
- یک شیء داده بساز با فیلدهای لازم.
- متد را با apply روی آن شیء اجرا کن.
جمع بندی سریع
- apply آرگومان ها را آرایه ای می گیرد.
- با apply مالک this را تعیین کن.
- برای آرایه ها کنار Math.max مفید است.
- strict رفتار مالکیت را تغییر می دهد.