This در جاوا اسکریپت

مفهوم this در جاوا اسکریپت

کلمه کلیدی this یکی از مباحث چالش‌برانگیز و در عین حال قدرتمند در زبان جاوا اسکریپت است. این مفهوم به شیء جاری اشاره دارد که تابع در آن زمینه (context) اجرا می‌شود. درک صحیح this برای توسعه‌دهندگان حرفه‌ای ضروری است.

مقدار this همیشه به شیءای اشاره می‌کند که تابع را فراخوانی کرده است، نه جایی که تابع تعریف شده است.

انواع رفتار this در موقعیت‌های مختلف

موقعیت مقدار this
تابع عادی شیء window (در حالت غیر strict)
متد شیء خود شیء
تابع سازنده نمونه جدید ایجاد شده
رویدادها عنصر دریافت‌کننده رویداد

مثال‌های کاربردی

در اینجا چند نمونه از رفتار this را مشاهده می‌کنیم:

  1. در متد شیء:
    const person = {
      name: 'علی',
      greet() { console.log(this.name); }
    };
    person.greet(); // خروجی: علی
  2. در تابع عادی:
    function test() { console.log(this); }
    test(); // در حالت غیر strict: window

کنترل مقدار this

می‌توانیم مقدار this را به صورت دستی با متدهای زیر کنترل کنیم:

  • call(): فراخوانی تابع با مقدار this و آرگومان‌های مشخص
  • apply(): مشابه call اما آرگومان‌ها به صورت آرایه دریافت می‌شوند
  • bind(): ایجاد تابع جدید با مقدار this ثابت

برای مطالعه عمیق‌تر می‌توانید به آموزش جامع This در جاوا اسکریپت مراجعه نمایید.


نکات کلیدی

1. در arrow functionها، this از محیط بیرونی به ارث می‌رسد و قابل تغییر نیست.

2. در حالت strict mode، this در توابع عادی undefined می‌شود.

3. مقدار this در زمان فراخوانی تابع تعیین می‌شود، نه در زمان تعریف.