در مثال مربوط به Date، با متد ()Date.now برخورد کردیم که زمان فعلی را برمیگرداند. این متد به هیچ نمونهی خاصی از تاریخ تعلق ندارد، بلکه متعلق به خودِ کلاس است. با این حال، به جای اینکه به عنوان یک تابع جهانی به نام ()DateNow در محیط برنامه رها شود، درون کلاس Date قرار گرفته است؛ چون کاربرد اصلی آن دقیقاً زمان کار با نمونههای تاریخ مشخص میشود.
نکته: اضافه کردن نامِ ساختاری که با آن کار میکنید به عنوان پیشوند قبل از متدهای کمکی، «فضای نامگذاری» (Namespacing) نام دارد و یک رویه عالی در برنامهنویسی به حساب میآید. به عنوان مثال، جاوااسکریپت علاوه بر متد قدیمی و بدون پیشوند
()parseInt، بعدها متد پیشونددار()Number.parseIntرا اضافه کرد تا نشان دهد این متد مستقیماً برای کار با اعداد طراحی شده است.
ویژگیهای استاتیک (Static properties) مجموعهای از امکانات کلاس هستند که روی خودِ کلاس تعریف میشوند، نه روی تکتکِ اینستنسهایی که از روی آن کلاس ساخته شدهاند. این امکانات عبارتند از:
متدهای استاتیک (Static methods)
فیلدهای استاتیک (Static fields)
گترها و سترهای استاتیک (Static getters and setters)
جالب است بدانید تمام این موارد، همتایان خصوصی (Private) نیز دارند. برای مثال، میتوانیم یک متد استاتیک به کلاس Color خودمان اضافه کنیم که بررسی کند آیا سه عدد ورودی، یک مقدار RGB معتبر تشکیل میدهند یا خیر:
class Color {
static isValid(r, g, b) {
return r >= 0 && r <= 255 && g >= 0 && g <= 255 && b >= 0 && b <= 255;
}
}
Color.isValid(255, 0, 0); // true
Color.isValid(1000, 0, 0); // false
ویژگیهای استاتیک شباهت بسیار زیادی به همتایان اینستنس خود دارند، با دو تفاوت اصلی:
همهی آنها با پیشوند static تعریف میشوند.
از طریق نمونهها (Instances) قابل دسترسی نیستند.
console.log(new Color(0, 0, 0).isValid); // undefined
ساختار ویژهای نیز به نام Static initialization block وجود دارد؛ این ساختار بلوکی از کد است که دقیقاً در اولین باری که کلاس در برنامه بارگذاری (Load) میشود، به صورت خودکار اجرا خواهد شد.
class MyClass {
static {
MyClass.myStaticProperty = "foo";
}
}
console.log(MyClass.myStaticProperty); // 'foo'
بلوکهای مقداردهی اولیه استاتیک تقریباً معادل این هستند که بلافاصله پس از اعلان یک کلاس، کدی را در خط بعدی اجرا کنید. تنها تفاوت کلیدی این است که این بلوکها به المانهای خصوصی و استاتیکِ کلاس (Static private elements) دسترسی کامل دارند.
این محتوا کاملا رایگان توسط تیم کدلپر ترجمه شده و در اختیار شما کاربران عزیز قرار گرفته است، هر گونه کپی برداری برای مقاصد غیر رایگان و بدون ذکر منبع، مورد پیگیری قانونی قرار میگیرد.
ترجمه شده از منبع: https://developer.mozilla.org/en-US/docs/Web/JavaScript