کلاس

کلاس به شما اجازه می‌دهد یک نوع داده‌ای که توسط کاربر تعریف می‌شود و شامل متغیرها و خواص (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 ندارد. در مورد دیگر اعضای کلاس در درسهای آینده توضیح خواهیم داد.