تابع Apply

از موتو کد، دانشنامهٔ برنامه‌نویسی


استفاده دوباره از متد[ویرایش | ویرایش]

با متد apply()، شما می‌توانید متدی بنویسید که روی اشیاء مختلف قابل استفاده باشد.[۱]

متد apply() در جاوا اسکریپت[ویرایش | ویرایش]

متد apply() شبیه به متد call() (در فصل قبلی) است.

در این مثال، متد fullName شیء person روی شیء person1 اجرا می‌گردد:

مثال[ویرایش | ویرایش]

var person = {
  fullName: function() {
    return this.firstName + " " + this.lastName;
  }
}
var person1 = {
  firstName: "Mary",
  lastName: "Doe"
}
person.fullName.apply(person1);  // Will return "Mary Doe"


مشاهدهٔ نتیجه


تفاوت بین متدهای call() و apply()[ویرایش | ویرایش]

تفاوت آنها درموارد زیر است:

متد call() آرگومان‌ها را به صورت جداگانه دریافت می‌کند.

متد apply() آرگومان‌ها را به صورت یک آرایه دریافت می‌کند.

متد apply() در صورتی که شما بخواهید به جای لیستی از آرگومان‌ها از آرایه‌ای از آرگومان‌ها استفاده کنید، بسیار کاربردی است.

متد apply() با آرگومان ها[ویرایش | ویرایش]

متد apply() آرگومان‌ها را درون یک آرایه دریافت می‌کند:

مثال[ویرایش | ویرایش]

var person = {
  fullName: function(city, country) {
    return this.firstName + " " + this.lastName + "," + city + "," + country;
  }
}
var person1 = {
  firstName:"John",
  lastName: "Doe"
}
person.fullName.apply(person1, ["Oslo", "Norway"]);


مشاهدهٔ نتیجه


در مقایسه با متد call() :

مثال[ویرایش | ویرایش]

var person = {
  fullName: function(city, country) {
    return this.firstName + " " + this.lastName + "," + city + "," + country;
  }
}
var person1 = {
  firstName:"John",
  lastName: "Doe"
}
person.fullName.call(person1, "Oslo", "Norway");


مشاهدهٔ نتیجه


شبیه سازی متد Max روی آرایه ها[ویرایش | ویرایش]

شما می‌توانید بزرگترین عدد (درون لیستی از اعداد) را با استفاده از متد Math.max() بیابید:

مثال[ویرایش | ویرایش]

Math.max(1,2,3);  // Will return 3


مشاهدهٔ نتیجه


از آنجایی که آرایه‌ها در جاوا اسکریپت متد max() ندارند، شما می‌توانید به جای آن متد، متد Math.max() را روی آن apply (به فارسی: اجرا) کنید.

مثال[ویرایش | ویرایش]

Math.max.apply(null, [1,2,3]); // Will also return 3


مشاهدهٔ نتیجه


مقدار اولین آرگومان (null) مهم نیست. این آرگومان در این مثال استفاده نمی‌شود.

این مثال‌ها نتیجه یکسانی دارند:

مثال[ویرایش | ویرایش]

Math.max.apply(Math, [1,2,3]); // Will also return 3


مشاهدهٔ نتیجه


مثال[ویرایش | ویرایش]

Math.max.apply(" ", [1,2,3]); // Will also return 3


مشاهدهٔ نتیجه


مثال[ویرایش | ویرایش]

Math.max.apply(0, [1,2,3]); // Will also return 3


مشاهدهٔ نتیجه


حالت سخت گیرانه در جاوا اسکریپت[ویرایش | ویرایش]

در حالت سخت گیرانه (Strict mode) در جاوا اسکریپت، اگر آرگومان اول متد apply() یک شیء نباشد، این آرگومان با صاحب (شیء) که تابع را اجرا کرده‌است، مقدار دهی می‌شود. در حالت غیر سخت گیرانه و عادی جاوا اسکریپت پارامتر اول با شیء کلی (Global) مقدار دهی می‌شود.


منابع آموزشی[ویرایش]