سازنده‌های شیء در جاوا اسکریپت

از ویکی کد
پرش به ناوبری پرش به جستجو
Main Page Tutorial
JavaScript-menu.png
موارد آموزشی
فرم‌ها در جاوا اسکریپت
اشیاء در جاوا اسکریپت
۱تعریف شیء
۲ویژگی‌های اشیاء
۳متدهای اشیاء
۴روش‌های دسترسی به شیء
۵سازنده‌های شیء
۶شکل اصلی شیء
۷متدهای شیء در نسخهٔ ES5
تابع در جاوا اسکریپت
HTML DOM در جاوا اسکریپت
Browser BOM در جاوا اسکریپت
AJAX در جاوا اسکریپت
JSON در جاوا اسکریپت
جی‌کوئری در برابر جاوا اسکریپت
مثال‌های جاوا اسکریپت
مرجع جاوا اسکریپت

مثال

1 function Person(first, last, age, eye) {
2   this.firstName = first;
3   this.lastName = last;
4   this.age = age;
5   this.eyeColor = eye;
6 }

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

انواع اشیاء (Blueprintsها) (کلاس‌ها)

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

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

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

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

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

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

کلمه کلیدی this

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

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

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

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

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

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

مثال

myFather.nationality = "English";

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

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

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

مثال

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

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

اضافه کردن یک ویژگی به یک سازنده (به انگلیسی: Constructor)

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

مثال

Person.nationality = "English";

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

مثال

1 function Person(first, last, age, eyecolor) {
2   this.firstName = first;
3   this.lastName = last;
4   this.age = age;
5   this.eyeColor = eyecolor;
6   this.nationality = "English";
7 }

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

اضافه کردن یک متد به یک سازنده (به انگلیسی: Constructor)

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

مثال

1 function Person(first, last, age, eyecolor) {
2   this.firstName = first;
3   this.lastName = last;
4   this.age = age;
5   this.eyeColor = eyecolor;
6   this.name = function() {return this.firstName + " " + this.lastName;};
7 }

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

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

مثال

1 function Person(firstName, lastName, age, eyeColor) {
2   this.firstName = firstName;
3   this.lastName = lastName;
4   this.age = age;
5   this.eyeColor = eyeColor;
6   this.changeName = function (name) {
7     this.lastName = name;
8   };
9 }

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

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


myMother.changeName("Doe");

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

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

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

مثال

1 var x1 = new Object();    // A new Object object
2 var x2 = new String();    // A new String object
3 var x3 = new Number();    // A new Number object
4 var x4 = new Boolean();   // A new Boolean object
5 var x5 = new Array();     // A new Array object
6 var x6 = new RegExp();    // A new RegExp object
7 var x7 = new Function();  // A new Function object
8 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() استفاده کنید.

مثال

1 var x1 = {};            // new object
2 var x2 = "";            // new primitive string
3 var x3 = 0;             // new primitive number
4 var x4 = false;         // new primitive boolean
5 var x5 = [];            // new array object
6 var x6 = /()/           // new regexp object
7 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)

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


منابع آموزشی