با عرض سلام خدمت کاربران محترم سایت پی وی لرن.
در این جلسه قصد داریم تا به مبحث سازنده اشیا در جاوا اسکریپت JavaScript و اضافه کردن متد به شی بپردازیم.
سازنده ها (Constructor) توابعی هستند که به عنوان طرحی برای ایجاد چندین شی هم نوع object استفاده می شوند.
در جلسات قبل ما از کلاس هایی استفاده می کردیم که فقط یک شی از آن ها ایجاد می شد.
گاهی اوقات به یک طرح نیاز داریم تا چندین شی هم نوع از روی این طرح ایجاد کنیم. برای این کار از تابع سازنده استفاده خواهیم کرد.
در مثال زیر ما تابع سازنده را تعریف می کنیم(بهتر است تا نام تابع سازنده با یک حرف بزرگ آغاز شود) :
1 2 3 4 5 6 | function Person(first, last, age, eye) { this.firstName = first; this.lastName = last; this.age = age; this.eyeColor = eye; } |
در مثال زیر ما دو شی از کلاس person ایحاد کرده ایم:
1 2 | var myFather = new Person("John", "Doe", 50, "blue"); var myMother = new Person("Sally", "Rally", 48, "green"); |
در جاوا اسکریپت، چیزی که this نامیده می شود،آبجکتی است که کد آن را “دارا” است.
ارزش this ، هنگامی که در یک شی مورد استفاده قرار می گیرد، خود شیء است.
در یک تابع سازنده this ارزش ندارد. this یک جایگزین برای شی جدید است. هنگامی که یک شیء جدید ایجاد می شود، ارزش this شی جدید می شود.
نکته : توجه داشته باشید که this یک متغیر نیست بلکه یک کلمه کلیدی می باشد که شما نمی توانید مقدار آن را تغیر دهید.
در کد زیر ما خاصیت nationality را فقط به شی myFather (نه myMother) اضافه می کنیم:
اضافه کردن متد به یک شی موجود نیز کار ساده ای است:
1 2 3 | myFather.name = function () { return this.firstName + " " + this.lastName; }; |
همچنین می توان یک تابع را در تابع سازنده تعریف کرد:
1 2 3 4 5 6 7 | 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;}; } |
نکته: ما هرگر نمی توانیم خاصیت یا متدی را به صورت زیر به سازنده اضافه کنیم:
1 | Person.Color = "White"; |
تنها راه اضافه کردن خاصیت و متد به سازنده تعریف آن در بدنه تابع سازنده می باشد.
برای افزودن یک خصوصیت به یک سازنده باید آن را داخل تابع سازنده اضافه کنید
1 2 3 4 5 6 7 | function Person(first, last, age, eyecolor) { this.firstName = first; this.lastName = last; this.age = age; this.eyeColor = eyecolor; this.nationality = "English"; } |
با این روش خصوصیات آبجکت می تواند مقادیر پیش فرض داشته باشد.
سازنده ی تابع شما همچنین می تواند متدهای پیش فرص نیز داشته باشد:
1 2 3 4 5 6 7 | 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;}; } |
شما نمی توانید یک متد جدید را به سازنده شیء اضافه کنید همانطور که متد جدیدی را به یک شیء موجود اضافه می کنید.
افزودن متدها به یک شیء باید در داخل تابع سازنده انجام شود:
1 2 3 4 5 6 7 8 9 | 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 مقدار name را به خصویت lastName شخص اختصاص می دهد.
جاوا اسکریپت می داند که شما دارید در مورد جایگزینی this با myMother صحبت می کنید.
جاوا اسکریپت برای اشیا محلی سازنده های پیش فرضی را داراست:
1 2 3 4 5 6 7 8 | 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 یک آبجکت عمومی است. کلید واژه this را نمی توان در ()Math استفاده کرد.
اما بهتر است تا کار را برای خودمان سخت نگیریم و دلیلی وجود ندارد تا اشیا پیچیده ای ایجاد کنیم.
بهتر است از جایگزین های زیر استفاده کنید :
از object literal {} به جای ()new Object استفاده کنید.
از “” به جای ()new String استفاده کنید.
به جای ()new Number، از عدد ۱۲۳۴۵ استفاده کنید.
به جای ()new Boolean، با استفاده از اصطلاحات true / false استفاده کنید.
استفاده از [] به جای ()new Array.
از الگوی / () / به جای ()RegExp جدید استفاده کنید.
از تابع () {} به جای ()new Function استفاده کنید.
در مثال زیر ما همان انواع داده بالا را در بدون سازنده تعریف کرده ایم:
1 2 3 4 5 6 7 | 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
اما رشته ها می توانند به عنوان شی نیز تعریف شوند: (“var firstName = new String(“john
معمولا از دستور مقابل برای مقدار دهی به اعداد استفاده می شود: var x = 123
اما اعداد می توانند به عنوان شی نیز تعریف شوند: (var x = new Number(123
معمولا از دستور مقابل برای مقدار دهی به boolean استفاده می شود: var x = false
اما boolean ها می توانند به عنوان شی نیز تعریف شوند: (var x = new Boolean(false
جلسه آموزش توابع سازنده اشیا در جاوا اسکریپت به پایان رسید.