مثال ـ سازنده شئ
function Person(first, last, age, eye) {
this.firstName = first;
this.lastName = last;
this.age = age;
this.eyeColor = eye;
}
نكات ـ نامگذاري تابع سازنده با حرف اول بزرگ عمل مناسبي منظور ميشود.
در موردthis ـ در تابع سازنده this مقدار ندارد .آن براي جايگزيني شئ جديد است .يعني هنگاميكه شئ جديد ايجاد ميشود نام آن در كلمهthis جايگزين ميشود .
بخش JavaScript This Keyword را هم مطالعه فزمائيد.
مثال هاي فصل قبل محدويت دارند وفقط اشياء واحد ايجاد ميكنند.
گاهي اوقات براي ايجاد بسياري از اشياء ازيك نوع طرح ونقشه("blueprint") نيازمنديم .راه ايجاد اشياء هم نوع استفاده از يك تابع سازنده است.
در مثال بالا function person( ) يك تابع سازنده شئ است .
شئ هائي از همان نوع با فراخواني تابع سازنده شئ و با كي وردnew ايجاد ميشوند.
مثال ـ در اين مثال دو شئ هم نوع بنامmyFather و myMother ايجاد شده اند .
const myFather = new Person("John", "Doe", 50, "blue"); const myMother = new Person("Sally", "Rally", 48, "green");
در جاوااسكريپت كي وردthis بيك شئ اشاره ميكند .اينكه كدام شئ ، بستگي بستگي به نحوي فراخواني يا استفاده آن دارد.
كي وردthis باشياء مختلف وابسته به استفاده ، اشاره ميكند .مطابق زير :
توجه ـthis يك متغير نيست ، آن يك كي ورد است .نميتوان مقدار آنرا تغيير داد .
اضافه نمودن يك ويژگي به شئ موجود كار آساني است .مطابق نمونه زير:
مثال ـ افزودن ويژگي به شئ موجود.
myFather.nationality = "English";
ويژگي اضافه شده به شئmyFaher براي شئmyMother نمي باشد .يا بعبارتي براي هيچكدام از اشياء ديگرperson نمي باشد .
افزودن متد بيك شئ كار آساني است .مطابق نمونه زير:
مثال ـ اضافه نمودن متد به شئ
myFather.name = function () { return this.firstName + " " + this.lastName; };
اين متد فقط به شئmyFather اضافه شده است، وتاثيري روي اشياء هم نوع ديگر ندارد .
نمي توان يك ويژگي جديد به يك سازنده شئ اضافه كرد، همانطوريكه يك ويژگي به شئ موجود اضافه ميشود.
مثال ـ مورد زير عمل نميگردد.
Person.nationality = "English";
براي اضافه كردن ويژگي به سازنده شي بايد آنرا به تابع آن اضافه نمود .به نمونه زير توجه كنيد
مثال ـ ويژگيnationality به تابع سازنذه اضافه شده است .
function Person(first, last, age, eyecolor) {
this.firstName = first;
this.lastName = last;
this.age = age;
this.eyeColor = eyecolor;
this.nationality = "English";
باين ترتيب ويژگي هاي شئ ميتوانند مقادير پيش فرض داشته باشند .دراين مثالnationality داراي پيش فرض است.
با تابع سازنده همچنين ميتوان متدها را تعريف كرد.
مثال ـ تعريف متدname در تابع سازنده
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() مقدارname را به ويژگيlastName شئ اختصاص ميدهد.
مثال ـ تغيير نام شئ از طريق متد فوق
myMother.changeName("Doe");
جاوااسكريپت ميداند كه با كدام شئperson اقدام ميكنيد، كد دراين مثال this به شئ myMother اشاره دارد.
جاوااسكزيپت براي اشياء بومي خود داراي سازنده هاي داخلي است:
// Anew String() // A new String object new Number() // A new Number object new Boolean() // A new Boolean object new Object() // A new Object object new Array() // A new Array object new RegExp() // A new RegExp object new Function() // A new Function object new Date() new Date object
شئmath() در ليست بالا نيست،math يك شئ سراسري جاوااسكريپت است و كي وردnew براي آن نميتواند استفاده شود .
همانطوريكه در بالا ملاحظه فرموديد، جاوااسكريپت داراي نسخه هاي شئ ازانواع داده هاي اوليه Number, StringوBoolean است .اما دليلي براي ايجاد اشياء پيچيده با آنها نيست .مقادير اوليه بسيار سريعتر ميباشند.
مثال ـ دستور اول سريعتر از دومي است.
let x="John":
let y= new String("Jhon:");
بجاي كيوردnew در تعريف انواع شئ داده موارد زير را رعايت كنيد:
مثال ـ براي موارد فوق
let x1 = ""; // new primitive string let x2 = 0; // new primitive number let x3 = false; // new primitive boolean const x4 = {}; // new Object object const x5 = []; // new Array object const x6 = /()/ // new RegExp object const x7 = function(){}; // new function
در جدول زير نمونه استفاده نرمال وشئ آماده است.
نوع | روش نرمال | روش شئ | آدرس بخش مطالب |
---|---|---|---|
رشته | let firstName="Jhon" | let firstName= new String("Jhon") | Js Strings |
اعداد | let x=3 | let x= new Number(3) | Js Number |
بولين | let x = false | let x = new Boolean(false) | Boolean Number |