کلاس
کلاس به شما اجازه میدهد یک نوع دادهای که توسط کاربر تعریف میشود و شامل متغیرها و خواص (properties) و متدها است را ایجاد کنید. کلاس در حکم یک نقشه برای یک شیء میباشد. شیء یک چیز واقعی است که از ساختار، خواص و یا رفتارهای کلاس پیروی میکند. وقتی یک شیء میسازید یعنی اینکه یک نمونه از کلاس ساختهاید (در درس ممکن است از کلمات شیء و نمونه به جای هم استفاده شود). برای تعریف یک کلاس از کلمه کلیدی class استفاده شود :
class ClassName { Variable1; Variable2; ... VariableN; method1; method2; ... methodN; }
این کلمه کلیدی را قبل از نامی که برای کلاسمان انتخاب میکنیم مینویسیم. در نامگذاری کلاسها هم از روش نامگذاری Pascal استفاده میکنیم. در بدنه کلاس فیلدها و متدهای آن قرار داده میشوند.
کلاس از فیلدها برای رفتارها و ذخیره مقادیر خاصیتهایش (property) استفاده میکند. متدها رفتارها یا کارهایی هستند که یک کلاس میتواند انجام دهد. در زیر نحوه تعریف و استفاده از یک کلاس ساده به نام person نشان داده شده است :
1: class Person 2: { 3: name; 4: age; 5: height; 6: 7: TellInformation() 8: { 9: console.log(`Name : ${this.name}`); 10: console.log(`Age : ${this.age} years old`); 11: console.log(`Height: ${this.height} cm`); 12: } 13: } 14: 15: let firstPerson = new Person(); 16: let secondPerson = new Person(); 17: 18: firstPerson.name = "Jack"; 19: firstPerson.age = 21; 20: firstPerson.height = 160; 21: firstPerson.TellInformation(); 22: 23: console.log("\n"); //Separator 24: 25: secondPerson.name = "Mike"; 26: secondPerson.age = 23; 27: secondPerson.height = 158; 28: secondPerson.TellInformation();
Name : Jack Age : 21 years old Height: 160 cm Name : Mike Age : 23 years old Height: 158 cm
همانطور که در کد بالا مشاهده میکنید، در خطوط 13-1 کلاسی به نام Person تعریف شده است. در خط 1 یک نام به کلاس اختصاص دادهایم تا به وسیله آن قابل دسترسی باشد. در داخل بدنه کلاس فیلدهای آن تعریف شدهاند (خطوط 5-3). این سه فیلد تعریف شده خصوصیات واقعی یک فرد در دنیای واقعی را در خود ذخیره میکنند. یک فرد در دنیای واقعی دارای نام، سن و قد میباشد. در خطوط 12-7 یک متد هم در داخل کلاس به نام TellInformation() تعریف شده است که رفتار کلاسمان است و مثلاً اگر از فرد سوالی بپرسیم در مورد خودش چیزهایی میگوید. در داخل متد کدهایی برای نشان دادن مقادیر موجود در فیلدها نوشته شده است. نکتهای درباره فیلدها وجود دارد و این است که چون فیلدها در داخل کلاس تعریف و به عنوان اعضای کلاس در نظر گرفته شدهاند، محدوده آنها یک کلاس است. این بدین معناست که فیلدها فقط میتوانند در داخل کلاس یعنی جایی که به آن تعلق دارند و یا به وسیله نمونه ایجاد شده از کلاس مورد استفاده قرار بگیرند.
در خطوط 16 و 17 دو نمونه یا دو شیء از کلاس Person ایجاد میکنیم. برای ایجاد یک نمونه از یک کلاس باید از کلمه کلیدی new و به دنبال آن نام کلاس و یک جفت پرانتز قرار دهیم :
15: let firstPerson = new Person(); 16: let secondPerson = new Person();
در خطوط 20-18 مقادیری به فیلدهای اولین شیء ایجاد شده از کلاس person1 اختصاص داده شده است. برای دسترسی به فیلدها یا متدهای یک شیء از علامت . استفاده میشود. به عنوان مثال کد $person1.name نشان دهنده متغیر name از شیء person1 میباشد. برای چاپ مقادیر فیلدها باید متد TellInformation() شیء person1 را فراخوانی میکنیم (خط 21). به کلمه کلیدی this در خطوط 11-9 توجه کنید. این کلمه کلیدی اشاره به شیء جاری دارد. یعنی وقتی مقادیر از طریق شیء person1 ارسال میشوند، منظور از this شیء person1 و وقتی از طریق شیء person2 ارسال میشوند منظور از this شیء person2 میباشد.
در خطوط 30-28 نیز مقادیری به شیء دومی که قبلاً از کلاس ایجاد شده تخصیص میدهیم و سپس متد TellInformation() را فراخوانی میکنیم. به این نکته توجه کنید که person1 و person2 نسخههای متفاوتی از هر متغیر دارند بنابراین تعیین یک نام برای person2 هیچ تاثیری بر نام person1 ندارد. در مورد دیگر اعضای کلاس در درسهای آینده توضیح خواهیم داد.