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

شاید تا حالا هربار که از تعریف کلاس توی جاوا اسکریپت بحث شده ، یه نفر گارد گرفته که " نههههه، مگه میشه توی JS کلاس تعریف کرد؟؟؟"

اولا که باید بگم بله میشه تعریف کرد، مثه تعریف کلاس توی زبان های دیگه و با همون خصوصیات. اما خب، منطقا یکم دستوراتش فرق داره که میشه چند دقیقه وقت گذاشت، اینجا رو مطالعه کرد و ازش استفاده کرد.

اما چیزی که بین تعریف کلاس توی JS و زبان های دیگه تفاوت ایجاد میکنه، اتفاقیِ که هنگام ساخته شدن کلاس توی موتور جاوا اسکریپت رخ میده.

بذارید از اینجا شروع کنیم که این موضوع توی زبان های دیگه به چه صورته؟ توی زبان های دیگه class به عنوان یک مفهوم، از پایه کد نویسی شده و واقعا وجود داره، در صورتی که توی JS دقیقا برعکسه.

ینی اساسا مفهومی به عنوان class تعبیه نشده و چیزی که ما ازش به عنوان کلاس نام میبریم،یک نوع فانکشن مخصوصه با خصوصیات یک class. ینی بعد از تعریف کردنش، اون فانکشن مخصوص اجرا میشه و برای ما، یک آبجکت میسازه با همون Prototype های مورد انتظار و موجود در کلاس.

خب این چه فایده‌ای داره؟ چرا خودمون یه فانکشن ننویسیم با همون خصوصیات مورد نظرمون و Constructorاش و باقی ماجرا؟!

به دوتا دلیل: اولیش اینکه بدنه‌ی این فانکشنِ مخصوص روی Strict mode قرار داره ( و ECMAScript ئه که داره این کار رو انجام میده ) و دومیش تفاوتش توی مسئله‌ای به نام Hoisting.

توی این فانکشن مخصوص ( که ما داریم به عنوان کلاس ازش استفاده میکنیم ) یه تفاوت مهم با فانکشنای دیگه وجود داره ، اونم اینه که حتما باید قبل از اینکه ازش استفاده کنیم، تعریف شده باشه.