همونطور که می‌دونیم آبجکت‌ها می‌تونن متد داشته باشن. مثل متد name توی آبجکت زیر:

const person = {
  firstname: 'John',
  lastname: 'Doe',

  name() {
    alert(`${this.firstname} ${this.lastname}`);
  }
}

person.name(); // John Doe

خب در حالت عادی متد name متعلق به آبجکت person هست و this به این آبجکت اشاره می‌کنه. با استفاده از متد apply می‌تونیم یه کاری کنیم که this توی متد name به یک آبجکت دلخواه دیگه اشاره کنه. یعنی متد name رو بتونیم جاهای دیگه استفاده کنیم:

const person = {
  firstname: 'John',
  lastname: 'Doe',

  name() {
    alert(`${this.firstname} ${this.lastname}`);
  }
}

const person1 = {
  firstname: 'Jeff',
  lastname: 'Olson'
}

const person2 = {
  firstname: 'Maria',
  lastname: 'Debug'
}

person.name.apply(person1);
person.name.apply(person2);

اگه متد name نیاز به آرگومان داشته باشه، می‌تونیم آرگومان‌ها رو بصورت آرایه پاس بدیم. ابتدا متد name رو بازنویسی کنیم که دو تا آرگومان بگیره:

const person = {
  name(age, country) {
    alert(`${this.firstname} ${this.lastname}, ${age}, ${country}`);
  }
}

و حالا بصورت زیر می‌تونیم ازش استفاده کنیم:

const person1 = {
  firstname: 'John',
  lastname: 'Doe'
}

person.name.apply(person1, [3, 'Japan']);

‌آرگومان دوم متد apply یک آرایه هست. هر کدوم از آیتم‌های این آرایه به عنوان آرگومان‌های متد name در نظر گرفته میشه.

 

منبع: