سازنده ها (Object Constructors)
«سازنده شی (Object Constructor)» یک تابع ویژه است که با new اجرا می شود و شی های هم نوع می سازد. مثل قالب کارتی که برای همه دانش آموزها کارت می زند.
تابع سازنده پایه
در سازنده، از this برای ساخت ویژگی ها استفاده می کنیم. this یعنی «همین شی جدید».
function Person(first, last, age, eye) {
this.firstName = first;
this.lastName = last;
this.age = age;
this.eyeColor = eye;
}
ساخت چند شی با new
با new هر بار یک شی تازه از همان نوع می گیری.
const myFather = new Person("John", "Doe", 50, "blue");
const myMother = new Person("Sally", "Rally", 48, "green");
const mySister = new Person("Anna", "Rally", 18, "green");
const mySelf = new Person("Johnny", "Rally", 22, "green");
مقدار پیش فرض ویژگی ها
می توانی داخل سازنده یک مقدار پیش فرض بگذاری تا همه داشته باشند.
function Person(first, last, age, eyecolor) {
this.firstName = first;
this.lastName = last;
this.age = age;
this.eyeColor = eyecolor;
this.nationality = "English";
}
افزودن ویژگی به یک شی ساخته شده
می توانی فقط به یک شی ویژگی اضافه کنی؛ بقیه تغییر نمی کنند.
myFather.nationality = "English";
نکته: این ویژگی فقط روی myFather است، نه همه Personها.
افزودن ویژگیِ مشترک با prototype
نمی توانی مستقیم به سازنده ویژگی بدهی؛ باید به prototype بدهی تا همگانی شود.
Person.prototype.nationality = "English";
متد داخل سازنده
می توانی متد بسازی؛ اما بهتر است متدهای مشترک روی prototype باشند.
function Person(first, last, age, eyecolor) {
this.firstName = first;
this.lastName = last;
this.age = age;
this.eyeColor = eyecolor;
this.fullName = function() {
return this.firstName + " " + this.lastName;
};
}
افزودن متد به یک شی خاص
می توانی فقط برای یک شی متد بسازی؛ بقیه ندارند.
myMother.changeName = function(name) {
this.lastName = name;
};
افزودن متد مشترک با prototype
برای همگانی کردن متد، آن را روی prototype بگذار.
Person.prototype.changeName = function(name) {
this.lastName = name;
};
myMother.changeName("Doe");
سازنده های توکار جاوااسکریپت
برای انواع داخلی هم سازنده داریم؛ اما معمولاً شکل لیترال ساده تر است.
new Object();
new Array();
new Map();
new Set();
new Date();
new RegExp();
new Function();
نکته: Math سازنده ندارد؛ یک شی سراسری است.
جایگزین های لیترالِ ساده
برای سادگی از لیترال ها استفاده کن: {} ، [] ، /.../ ، تابع بی نام.
"";
0;
false;
{};
[];
/()/;
function(){};
گام های تمرینی
- یک سازنده
Studentبنویس و سه شی بساز. - یک متد
avg()بهStudent.prototypeاضافه کن. - به یک دانش آموز، ویژگی
rankجداگانه بده.
ادامه مسیر: تعریف شی و سازنده ها و Closureها.
جمع بندی سریع
newیک شی هم نوع می سازد.thisداخل سازنده، شی جدید است.- ویژگی مشترک را روی
prototypeبگذار. - متدهای مشترک را هم روی
prototypeبساز. - لیترال ها ساده تر و خواناترند.