سازنده‌های شیء

از موتو کد، دانشنامهٔ برنامه‌نویسی

مثال[ویرایش | ویرایش]

function Person(first, last, age, eye) {
  this.firstName = first;
  this.lastName = last;
  this.age = age;
  this.eyeColor = eye;
}


مشاهدهٔ نتیجه


تمرین خوبی است که حرف اول نام متدهای سازنده (Constructor) را با حرف بزرگ بنویسید.

انواع اشیاء (Blueprintsها) (کلاس‌ها)[ویرایش | ویرایش]

مثال‌های فصل‌های قبلی، مثال‌های محدودی هستند. آنها فقط تک شیء ایجاد می‌کنند.[۱]

گاهی اوقات ما به یک "blueprint" برای ساختن چند شیء از یک نوع نیاز داریم.

راهی که برای ساخت یک نوع کلاس یا "object type" وجود دارد، این است که از یک متد سازنده شیء (object constructor function) استفاده کنیم.

در مثال فوق، تابع یا متد function Person() متد سازنده یک شیء است.

اشیاء از یک نوع را می‌توان با فراخوانی متد سازنده شیء با استفاده از کلمه کلیدی new استفاده کرد:

var myFather = new Person("John", "Doe", 50, "blue");
var myMother = new Person("Sally", "Rally", 48, "green");


مشاهدهٔ نتیجه


کلمه کلیدی this[ویرایش | ویرایش]

در جاوا اسکریپت، چیزی که this را فراخوانی می‌کند شیء است که «صاحب» کد است.

مقدار کلمه کلیدی this ، زمانی که در یک شیء استفاده می‌شود، خود آن شیء است.

در یک متد سازنده، کلمه کلیدی this مقداری ندارد. این کلمه جانشینی برای شیء جدید است. مقدار کلمه this زمانی که شیء جدید ساخته شد برابر خواهد بود با شیء جدید.

توجه داشته باشید که this یک متغیر نیست. یک کلمه کلیدی است. شما نمی‌توانید مقدار کلمه this را تغییر دهید.

اضافه کردن یک ویژگی به یک شیء[ویرایش | ویرایش]

اضافه کردن یک ویژگی جدید به یک شیء موجود، آسان است:

مثال[ویرایش | ویرایش]

myFather.nationality = "English";


مشاهدهٔ نتیجه


این ویژگی به شیء myfather اضافه خواهد شد. نه به شیء myMother (و نه به هر شیء از شیء person).

اضافه کردن یک متد به یک شیء[ویرایش | ویرایش]

اضافه کردن یک متد جدید به یک شیء موجود، کاری آسان است:

مثال[ویرایش | ویرایش]

myFather.name = function () {
  return this.firstName + " " + this.lastName;
};


مشاهدهٔ نتیجه


این ویژگی به شیء myfather اضافه خواهد شد. نه به شیء myMother (و نه به هر شیء از شیء person).

اضافه کردن یک ویژگی به یک سازنده (Constructor)[ویرایش | ویرایش]

شما نمی‌توانید از روشی که برای اضافه کردن ویژگی به یک شیء موجود استفاده می‌کنید، برای اضافه کردن ویژگی به سازنده شیء نیز استفاده کنید.

مثال[ویرایش | ویرایش]

Person.nationality = "English";


مشاهدهٔ نتیجه


برای اضافه کردن یک ویژگی به یک سازنده، شما می‌بایست آن را به تابع سازنده اضافه کنید:

مثال[ویرایش | ویرایش]

function Person(first, last, age, eyecolor) {
  this.firstName = first;
  this.lastName = last;
  this.age = age;
  this.eyeColor = eyecolor;
  this.nationality = "English";
}


مشاهدهٔ نتیجه


در این روش، ویژگی‌های شیء می‌توانند مقادیر پیشفرض داشته باشند.

اضافه کردن یک متد به یک سازنده (Constructor)[ویرایش | ویرایش]

توابع سازنده شما همچنین می‌توانند شامل متدها را نیز باشند:

مثال[ویرایش | ویرایش]

function Person(first, last, age, eyecolor) {
  this.firstName = first;
  this.lastName = last;
  this.age = age;
  this.eyeColor = eyecolor;
  this.name = function() {return this.firstName + " " + this.lastName;};
}


مشاهدهٔ نتیجه


شما نمی‌توانید یک متد جدید را به یک سازنده شیء از همان روشی که یک متد را به یک شیء موجود اضافه می‌کنید، اضافه کنید.

اضافه کردن یک متد به یک سازنده شیء می‌بایست درون متد سازنده شیء انجام شود:

مثال[ویرایش | ویرایش]

function Person(firstName, lastName, age, eyeColor) {
  this.firstName = firstName;
  this.lastName = lastName;
  this.age = age;
  this.eyeColor = eyeColor;
  this.changeName = function (name) {
    this.lastName = name;
  };
}

تابع changeName() مقدار نام را روی ویژگی lastName ست می‌کند.

حالا شما می‌توانید کد زیر را امتحان کنید[ویرایش | ویرایش]

myMother.changeName("Doe");


مشاهدهٔ نتیجه


جاوا اسکریپت از طریق کلمه کلیدی this که «جانشینی» برای شیء myMother است، می‌فهمد که منظور شما کدام شیء person است.

متدهای سازنده پیشفرض در جاوا اسکریپت[ویرایش | ویرایش]

جاوا اسکریپت متدهای سازندهٔ پیشفرضی برای اشیاء اصلی دارد :

مثال[ویرایش | ویرایش]

var x1 = new Object();    // A new Object object
var x2 = new String();    // A new String object
var x3 = new Number();    // A new Number object
var x4 = new Boolean();   // A new Boolean object
var x5 = new Array();     // A new Array object
var x6 = new RegExp();    // A new RegExp object
var x7 = new Function();  // A new Function object
var x8 = new Date();      // A new Date object


مشاهدهٔ نتیجه


شیء Math() درون لیست بالا نیست. Math یک شیء کلی یا global است. کلمه کلیدی new را نمی‌توان با Math استفاده کرد.

آیا می‌دانستید؟[ویرایش | ویرایش]

همان‌طور که در بالا مشاهده می‌کنید، جاوا اسکریپت اشیائی از نوع داده‌های Boolean ,Number ,String دارد. اما دلیلی برای ساخت اشیاء پیچیده وجود ندارد. مقادیر اصلی (primitive) بسیار سریع‌تر هستند.

همچنین:

از تعریف اصلی شیء { } به جای استفاده از new Object() استفاده کنید.

از تعریف اصلی رشته متنی یا String یعنی " " به جای new String() استفاده کنید.

از عددهای ساده همانند ۱۲۳۴۵ به جای new Number() استفاده کنید.

از مقادیر منطقی اصلی true / false به جای new Boolean() استفاده کنید.

از تعریف آصلی آرایه [ ] به جای new Array() استفاده کنید.

از الگوهای اصلی /( )/ به جای new RegExp() استفاده کنید.

از تعریف تابع به صورت اصلی یعنی function expressions() { } به جای new Function() استفاده کنید.

مثال[ویرایش | ویرایش]

var x1 = {};            // new object
var x2 = "";            // new primitive string
var x3 = 0;             // new primitive number
var x4 = false;         // new primitive boolean
var x5 = [];            // new array object
var x6 = /()/           // new regexp object
var x7 = function(){};  // new function object


مشاهدهٔ نتیجه


اشیاء رشته‌ای یا متنی[ویرایش | ویرایش]

به صورت عادی، رشته‌های متنی به صورت داده‌های اصلی تعریف می‌شوند: var firstName = "John"

اما رشته‌های متنی را نیز می‌توان همانند اشیاء با استفاده از کلمه کلیدی new ساخت: var firstName = new String("John")

دلیل اینکه رشته‌های متنی نباید به صورت شیء تعریف شوند را در فصل رشته‌های متنی در جاوا اسکریپت بخوانید.

اشیاء عددی[ویرایش | ویرایش]

به صورت عادی، اعداد نیز به صورت اصلی تعریف می‌شوند: var x = 123

اما اعداد نیز می‌توانند به صورت یک شیء با استفاده از کلمه کلیدی new تعریف شوند: var x = new Number(123)

دلیل اینکه اعداد نباید به صورت شیء تعریف شوند را در فصل اعداد در جاوا اسکریپت، بخوانید.

اشیاء منطقی (Boolean)[ویرایش | ویرایش]

به صورت عادی، مقادیر منطقی (boolean) نیز به صورت اصلی تعریف می‌شوند: var x = false

اما مقادیر منطقی (boolean) نیز می‌توانند به صورت شیء بااستفاده از کلمه کلیدی new تعریف شوند: var x = new Boolean(false)

دلیل اینکه مقادیر منطقی نباید به صورت شیء تعریف شوند را در فصل مقادیر منطقی در جاوا اسکریپت بخوانید.

منابع آموزشی[ویرایش]