توی این پست یه توضیح سریع از static method در جاوا اسکریپت و موارد کاربرد اون رو با هم می بینیم.
روش تعریف و استفاده از static method که در ES6 اضافه شده در کد زیر اومده است تا خیلی زود بریم سر اصل مطلب:
همان طور که در کد بالا مشخص هست کافیه بااستفاده از کلمه static اون رو داخل class تعریف کنیم و به روش زیر هم می تواند صدا زده شود:
خوب نکته ی مهم در اینه که متد static برای صدا زده شدن نیاز به ساخت شی از کلاس ندارد و اصلا نباید از روی شی صدا زده شود! چون اون متد رو شناسایی نمیکنه و خطا میخوریم!
پس باید به صورتی که در کد مشاهده می کنید از اون استفاده کنیم و صدا زدن static method ها از روی خود کلاس امکان پذیر هست.
اگر به صورت دقیق تر بخواهیم بررسی کنیم در واقع متد از نوع static به prototype کلاس شما اضافه نمیشه و می تونید با بررسی proto شی ساخته شده مطمئن شوید که متد static رو نمی بینید چون این متد به کلاس شما اضافه شده است نه به prototype کلاس پس نمیتونیم از طریق شی صدا بزنیمش.
نکته ی مهم جملات بالا !
همان طور که متوجه شدید داخل متد static ما به صفات شی دسترسی نداریم! و نباید از اونها استفاده کنیم.
بنابراین فرض کنیم اگر یک property داخل کلاس خودمون به اسم name داشته باشیم و داخل متد static اون رو به صورت this.name صدا بزنیم مقدار undefined می گیریم!!
اما چگونه داخل متد های دیگر static method رو صدا بزنیم؟
صدا زدن متدهای static از توابع دیگر با استفاده از this.staticClassName امکان پذیر نیست بلکه باید همان طور که در کد بالا مشاهده می کنیم از this.constructor استفاده کنیم.
موارد کاربرد static method ها در جاوا اسکریپت
اگر به سورس کد های مهم نگاه بندازیم می بینیم که بیشترین استفاده از static method ها به عنوان توابع helper هست.
در مواردی نیز به عنوان جایگزینی برای constructor ها می توانند استفاده شوند مثلا زمانی که قصد ساخت یک شی از کلاسی رو دارید.
برای مثال کد زیر رو نگاه کنید که از static method به عنوان یک helper برای مقایسه ۲ تا شی از همان کلاس استفاده کرده است:
نوشتن متد static برای مقایسه object ها یکی از موارد مرسوم هست به این دلیل که ما در کلاس خودمون به متدی نیاز داریم که
پس در این مورد و موارد مشابه static method ها می تونند راهگشا باشند.
مثال دیگری رو ببینیم که به عنوان جایگزین constructor می تونیم از متد static استفاده کنیم:
استفاده از static method در این کد به ما این امکان را داده است که اگر نخواستیم یک article با عنوان مشخص و تاریخ ایجاد کنیم از طریق متد createTodays یک article به تاریخ امروز و بدون عنوان ایجاد کنیم.
خوب در این پست نحوه ی تعریف و استفاده از متد های static در جاوا اسکریپت رو دیدیم و برای موارد بیشتر می تونید لینک زیر رو مشاهده کنید: