سازنده

سازنده‌ها متدهای خاصی هستند که وجود آنها برای ساخت اشیاء لازم است. آن‌ها به شما اجازه می‌دهند که فیلدهای کلاس را مقداردهی اولیه کنید و کدهایی که را که می‌خواهید هنگام ایجاد یک شیء اجرا شوند را به برنامه اضافه کنید. اگر از هیچ سازنده‌ای در کلاستان استفاده نکنید، جاوااسکریپت از سازنده پیشفرض که یک متد بدون پارامتر است استفاده می‌کند. برای ایجاد سازنده از متد خاص ()constructor استفاده می کنیم. در مثال زیر یک کلاس که شامل سازنده پیشفرض (خطوط 10-7) است را مشاهده می‌کنید :

 1: class Person
 2: {
 3:     name;
 4:     age;
 5:     height;
 6: 
 7:     constructor()
 8:     {            
 9:                   
10:     }            
11: 
12:     TellInformation()
13:     {
14:         console.log(`Name  : ${this.name}`);
15:         console.log(`Age   : ${this.age} years old`);
16:         console.log(`Height: ${this.height} cm`);
17:     }
18: }
19: 
20: var person1 = new Person();
21: console.log(person1); 
Person {name: undefined, age: undefined, height: undefined}

می‌توانیم این سازنده را هم تعریف نکنیم چون جاوااسکریپت به طور خودکار آن را ایجاد می‌کند. همانطور که در خط 20 و 21 مشاهده می‌کنید ما یک شیء یا یک نمونه از کلاس ایجاد کرده‌ایم (در درس بعد بیشتر توضیح می‌دهیم) و با استفاده از تابع ()log مقادیر موجود در این شیء را چاپ کرده‌ایم. در خروجی مشاهده می‌کنید که سازنده پیشفرض به هر سه فیلد مقدار undefined را اختصاص داده است. مثلاً بهتر است که با استفاده از سازنده مقدار پیشفرض به فیلدها اختصاص دهیم. مثلاً فردی که به دنیا می‌آید نام (name) ندارد ولی سن (age) و قد (height) دارد. پس می‌توانیم به صورت زیر این مقادیر را به فیلدها با استفاده از سازنده پیشفرض اختصاص دهیم :

 1: class Person
 2: {
 3:     name;
 4:     age;
 5:     height;
 6: 
 7:     constructor()        
 8:     {                    
 9:         this.name   = ""; 
10:         this.age    = 9 ; 
11:         this.height = 30;
12:     }                    
13: 
14:     TellInformation()
15:     {
16:         console.log(`Name  : ${this.name}`);
17:         console.log(`Age   : ${this.age} years old`);
18:         console.log(`Height: ${this.height} cm`);
19:     }
20: }
21: 
22: var person1 = new Person();
23: person1.TellInformation(); 
Name  :
Age   : 9 Month
Height: 30 cm

حال فرض کنید می‌خواهیم سازنده‌ای ایجاد کنیم که بعد از ایجاد یک شیء از کلاس، فیلدهای شیء ایجاد شده را خودمان و با استفاده از سازنده‌ای که تعریف کرده‌ایم مقداردهی کنیم. به کد زیر توجه کنید :

 1: class Person
 2: {
 3:     name;
 4:     age;
 5:     height;
 6: 
 7:     constructor(n, a, h)
 8:     {                   
 9:         this.name   = n; 
10:         this.age    = a; 
11:         this.height = h;
12:     }                   
13: 
14:     TellInformation()
15:     {
16:         console.log(`Name  : ${this.name}`);
17:         console.log(`Age   : ${this.age} years old`);
18:         console.log(`Height: ${this.height} cm`);
19:     }
20: }
21: 
22: var person1 = new Person("Jack", 21, 160);
23: person1.TellInformation(); 
24: 
25: console.log("\n");
26: 
27: var person2 = new Person("Mike", 32, 158);
28: person2.TellInformation(); 
Name  : Jack
Age   : 21
Height: 160

Name  : Mike
Age   : 32
Height: 158 

همانطور که مشاهده می‌کنید در مثال بالا سازنده‌ای را سه آرگومان قبول می‌کند به کلاس Person اضافه کرده‌ایم (خطوط 12-7). در خطوط 22 و 27 بعد از ایجاد شیء و در داخل پرانتزها سه مقدار را به سازنده (خط 7) ارسال می‌کنیم و سازنده این مقادیر را به فیلدها (خطوط 5-3) اختصاص می‌دهد.