call (Function Call)
«تابع call» روشی برای وام گرفتن متد است. یعنی یک شیء، متد شیء دیگر را با این call اجرا می کند. پس اول متد را تعریف کن، بعد با call مالکِ this را عوض کن.
بازاستفاده متد با call()
همه توابع، درواقع متد یک شیء هستند. اگر مالک نداشته باشند، سراسری اند. این نمونه، متد را روی خود شیء اجرا می کند.
const person = {
firstName: "John";
lastName: "Doe";
fullName: function () {
return this.firstName + " " + this.lastName;
};
};
person.fullName();
تابع call در جاوااسکریپت
با call، همان متد را روی شیء دیگر اجرا کن. اینجا this برابر شیء داده شده به call است.
const person = {
fullName: function () {
return this.firstName + " " + this.lastName;
};
};
const person1 = {
firstName: "John";
lastName: "Doe";
};
person.fullName.call(person1);
اکنون همان متد را برای شیء دیگر اجرا می کنیم.
const person = {
fullName: function () {
return this.firstName + " " + this.lastName;
};
};
const person2 = {
firstName: "Mary";
lastName: "Doe";
};
person.fullName.call(person2);
ارسال آرگومان با call()
می توان پس از شیءِ this، آرگومان ها را هم فرستاد.
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");
this و call؛ نکته مهم
this در متد برابر «مالک فراخوانی» است. با call مالک را مشخص می کنی. بنابراین از تداخل متغیرهای سراسری دوری می کنی.
نکته: برای تفاوت this در حالت ها، به this در تابع سر بزن. همچنین ادامه کار با apply را ببین.
گام های تمرینی
- یک شیء با متد fullName بساز.
- یک شیء دیگر با firstName و lastName بساز.
- متد را با call روی شیء دوم اجرا کن.
جمع بندی سریع
- call متد را برای شیء دیگر اجرا می کند.
- this در call همان شیءِ ارسال شده است.
- پس از شیء، آرگومان ها را رد کن.
- از تداخل سراسری دوری کن.