تابع سازنده شی در JS

گاهی اوقات نیاز است تا اشیاء زیادی از یک نوع ایجاد کنیم.

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

بهتر است که تابع سازنده را حرف بزرگ نامگذاری کنیم.

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

نکته: در تابع سازنده، this هیچ مقداری ندارد. هنگامی که یک شی جدید ایجاد می شود، مقدار this به شی جدید تبدیل می شود.

ما می‌توان از ()new Person برای ایجاد اشیاء جدید Person استفاده کنیم.

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");

مقادیر پیش‌فرض ویژگی در JS

مقداری که به یک ویژگی داده می شود یک مقدار پیش فرض برای تمام اشیاء ایجاد شده توسط سازنده خواهد بود.

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

افزودن یک ویژگی به یک شیء در JS

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

myFather.nationality = "English";

نکته: این مقدار فقط به myFather  اضافه می شود و به ویژگی های Person اضافه نمی شود.

 

اضافه کردن یک ویژگی به سازنده در JS

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

Person.nationality = "English";

برای اضافه یک ویژگی جدید، باید آن را به نمونه اولیه تابع سازنده اضافه کنید.

Person.prototype.nationality = "English";

متدهای تابع سازنده در JS

یک تابع سازنده همچنین می تواند متدهایی داشته باشد.

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;
  };
}

اضافه یک متد به یک شیء در JS

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

myMother.changeName = function (name) {
  this.lastName = name;
}

نکته: این متد فقط به myMother اضافه می شود و به ویژگی های Person اضافه نمی شود

 

اضافه کردن یک متد به یک سازنده

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

این کد یک خطای نوع داده‌ای (TypeError) تولید می‌کند.

Person.changeName = function (name) {
  this.lastName = name;
}

myMother.changeName("Doe");

برای اضافه یک متد جدید باید به نمونه اولیه تابع سازنده انجام شود.

Person.prototype.changeName = function (name) {
  this.lastName = name;
}

myMother.changeName("Doe");

تابع changeName() مقدار نام را به خصوصیت lastName شخص اختصاص می دهد، این را با myMother جایگزین می کند.

سازند های داخی در JS

جاوااسکریپت برای همهٔ اشیاء اصلی، سازنده‌های درونی دارد.

new Object()  
new Array()  
new Set()      
new Date()    
new RegExp()   
new Function() 

 

نکته: ریاضی یا ()Math در لیست اشیا نیست. ریاضی یک شی جهانی است و  کلمه کلیدی جدید را نمی توان در ریاضیات استفاده کرد.

 

آیا میدانستید؟

به جای ()new Object از اشیا واقعی {} استفاده کنید.

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

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

از عبارات تابع () {} به جای ()Function جدید استفاده کنید.

"";           // رشته ابتدایی
0;            // عدد اولیه
false;        // بولین

{};           // شیء شی
[];           // شی آرایه
/()/          //شی regexp
function(){}; //تابع

خلاصه درس

تمرین


مشاهده پاسخ
توسعه دهندگان
احسان اسلامی