this
کلمه کلیدی this
یکی از مفاهیم مهم و گاهی گیجکننده در جاوااسکریپت است.
this
به شیئی اشاره میکند که در حال حاضر کد درون آن اجرا میشود.
1️⃣ this در یک شیء ساده
وقتی متدی داخل یک شیء تعریف میکنیم، this
به همان شیء اشاره میکند.
🔹 در اینجا this.name
→ به property name
شیء person
اشاره دارد.
2️⃣ this در خارج از شیء
وقتی در Global Scope (بیرون از هر شیء) از this
استفاده کنیم:
-
در مرورگر → به شیء
window
اشاره دارد. -
در Node.js → به شیء
global
اشاره دارد.
3️⃣ this در Function عادی
اگر تابع بهصورت عادی فراخوانی شود (نه به عنوان متد شیء)، مقدار this
برابر با undefined
(در strict mode) یا window
(در حالت معمولی) است.
4️⃣ this در Method یک شیء
اگر تابع به عنوان متد شیء فراخوانی شود، this
به همان شیء اشاره میکند:
5️⃣ this و Constructor Functions
در توابع سازنده (Constructor Functions)، this
به شیء جدیدی که ساخته میشود اشاره دارد:
6️⃣ this در Arrow Functions
⚡ تفاوت مهم: در Arrow Function مقدار this
به محیط بیرونی خودش (lexical scope) بستگی دارد و تغییر نمیکند.
🔹 یعنی arrow functionها this
مخصوص خودشان ندارند و از context بیرونی استفاده میکنند.
7️⃣ استفاده از call(), apply(), bind()
میتوانیم بهطور دستی مقدار this
را تغییر دهیم:
📑 جدول خلاصه
موقعیت | مقدار this |
---|---|
در شیء (متد) | به همان شیء اشاره دارد |
در تابع عادی (strict mode) | undefined |
در تابع عادی (غیر strict mode) | window (در مرورگر) |
در Constructor Function | شیء جدید ساختهشده |
در Global Scope | window (مرورگر) یا global (Node.js) |
در Arrow Function | مقدار this از scope بیرونی گرفته میشود |
با call/apply/bind | مقدار this به صورت دستی تعیین میشود |