this in Functions
کلمه کلیدی this در جاوااسکریپت به شیئی که تابع در زمان اجرا به آن تعلق دارد اشاره میکنه.
اما مقدار this بستگی به نحوه فراخوانی تابع (Invocation) داره.
1️⃣ this در یک تابع معمولی (Global Function)
در حالت strict mode → مقدار this برابر undefined
در حالت عادی → مقدار this برابر window (در مرورگر) یا global (در Node.js)
2️⃣ this در یک متد (Method in Object)
وقتی تابع داخل یک شیء صدا زده میشه → this به همون شیء اشاره میکنه.
3️⃣ this در توابع تو در تو (Nested Functions)
توابع داخلی به صورت پیشفرض this رو از والد به ارث نمیبرن.
📌 راهحل → استفاده از Arrow Function یا bind:
4️⃣ this در Constructor Function
وقتی تابع با new صدا زده بشه → this به شیء جدید ساخته شده اشاره میکنه.
5️⃣ this در Arrow Function
Arrow function مقدار this رو از محیط بیرونی (lexical scope) به ارث میبره و دیگه تغییر نمیکنه.
📌 پس برای متدها بهتره از function معمولی استفاده کنیم.
6️⃣ this با call, apply, bind
-
call→ فراخوانی تابع با تغییرthisو ارسال آرگومانها جدا جدا -
apply→ مثل call ولی آرگومانها در قالب آرایه -
bind→ یک نسخه جدید از تابع میسازه کهthisبه شیء مورد نظر قفل شده
📌 خلاصه مهم
-
تابع معمولی → this = window/global (یا undefined در strict)
-
متد شیء → this = همان شیء
-
توابع تو در تو → this از دست میره (مگر با arrow function یا bind)
-
سازنده (new) → this = شیء جدید
-
arrow function → this از محیط بیرونی میاد (lexical this)
-
call/apply/bind → کنترل دستی this
HTML
Tailwind Css
Bootstrap 5
Java script
++C
Python
Three.js
Gsap
Sass
SQL
React