شی گرایی در جاوا اسکریپت

ناصر نادری | 1393/10/24


بنام  خدا  :  با عرض پوزش به خاطر تمام تاخیر ها .

تو این جلسه میخواییم در مورد شی گرایی در جاوا اسکریپت  مطالبی رو خدمتتون عرض کنم :

قبل از هرچیز باید بگم که اینجا  شی گرایی خیلی با زبانهای دیگه متفاوت هست  یعنی منتظر ایجاد یک کلاس بعد خواص و متد مثل زبانهای دیگه نباشید (البته مفهوم همونه فقط پیاده سازی متفاوته) و باید خودتون رو توی جاوا اسکریپت با مفهوم object اون جوری که  امروز میگم  تطبیق بدید.

علت بوجود اومدن شی گرایی این بود که  موجودیت های داخل یک برنامه  رو از نظر خواص و عملکرد ازهم جداکنیم  و برای برقرای ارتباط بین دو موجودیت فقط  از طریق همین خواص و متدها و بر اساس قوانین دسترسی  عمل کنیم . اینطوری برنامه های  بزرگ به  ماژولهای  جداگانه تقسیم میشه و اشکالزدایی و توسعه بهتر و سریعتر انجام میشه ضمن اینکه شی گرایی یک مفهوم برگرفته شده از طبیعت و زندگی واقعیه و از این نظر هم برنامه هارو  قابل انعطاف تر کرده .

برای مثال شما یک ماشین  پژو  رو در نظر بگیرید. قبل از اینکه پژو باشه یک نوع ماشین هست .  ماشین یک کلاس هست و پژو یک نوع از این کلاس  یعنی یه پیاده سازی از کلاس ماشین پژو هست . حالا همین  کلاس ماشین دارای خواص و عملکردی هست . میدونیم تمام ماشینها دارای خواصی مثل رنگ , قدرت موتور , و ....  هستن در ضمن یک سری عمل هم انجام میدن مثل حرکت کردن , ترمز کردن و گاز دادن و ....  . این خواص کلی هستن و توی انواعی که از این کلاس گرفته میشن مقدار دهی میشن . مثلا نوع پژو خاصیت قدرت موتور رو با مقدار 120 اسب خار مقدار دهی میکنه و نوع پیکان با 75 مقدار دهی میکنه یعنی مقادیر  فقط توی انواع تعریف شده  از کلاس  به خواص داده میشه  و کلاس اصلی تغییری  نمیکنه .

حالا بین همین کلاسها سلسله مراتبی وجود دراه و بعضی کلاسها خواص مشترکی با کلاسهای دیگه دارن که توی پیاده سازی این مفاهیم به موضوعاتی مثل ارث بری کلاسها ازهم و کپسوله سازی برخورد میکنیم .

جاوا اسکریپت این مفاهیم رو خیلی خلاصه کرده  و شما زیاد درگیر این مسائل توی کلاس مثل ارث بری و ... نمیشین  .

بریم سراغ اصل مطلب :

 var Car="Peykan"; 

این یک متغییر ساده است که یک مقدار داره ولی

 var  Car = {type: "peykan",model:1600,color:"white"}; 

ولی این یک  شی هست که تعریف کردیم و سه تا خاصیت نوع , مدل و رنگ رو براش تعریف کردیم و یک مقدار دهی اولیه هم کردیم . برای دسترسی به خواص این شی به روشهای زیر عمل میکنیم

 document.write(Car.Type);//صدازدن خاصیت نوع و چاپ 
document.write(Car["type"]);//یا میشه مثل دسترسی به اعناصر آرایه  از عضو یک شی جاوا اسکریپ استفاده کرد 
Car.model=1700; 

 

برای تعریف یک کلاس از همون مفهوم تابع در جاوا اسکریپت استفاده میکنیم :

//این در واقع تعریف یک کلاس هست که شبیه تعریف تابع هست و لی ازش برای مفهوم کلاس در جاوا اسکریپت استفاده میشه

  function person(Name,LName,Code)
{
    this.name=Name;
    this.lname=LName;// تعریف خواص و مقدار دهی اولیه
    this.code=Code; 
this.PrintRecord=function(){document.write("Name is : "+ this.name + " Last Name is : "+ LName + " Code is : "+ this.code)};//تعریف متد و دسترسی به خواص کلاس از اخل متد   } 
var Per=new person("Naser","Naderi","125656");//در اینجا ما از کلاس بالایی یک نوع جدید تعریف میکنیم و در ضمن در حال تعریف اون رو مقدار دهی میکنیم 
Per.PrintRecord();//فراخوانی متد داخل شی 
Per.code="120000";// مقدار دهی یک خاصیت از شی تعریف شده
Per.PrintRecord();

از کدهای بالا خیلی واضح با نوع تعریف یک کلاس و نوع تعریف خواص و متدهای داخل اون آشناشدید . دیدید که جاوا اسکریپت از function برای ایجاد کلاس استفاده میکنه . توی کد زیر یک شی رو باز مستقیم تعریف میکنم و بعد ازش استفاده میکنیم . دقت کنید که این بار کلاسی در کار نیست و فقط یک شی رو تعریف میکنیم.

 var Person={
Name:"Naser",
LName:"Naderi",
Code:"2121",
PrintName:function() {alert(this.Name);}
};
Person.PrintName(); 

این بحث خیلی مهمه و یادگیری و درک این مطلب میتونه بهتون توی کار با json و jquery  و تمام مفاهیم جدید که بر اساس جاوا اسکریپت ساخته شده کمک کنه . برای همین به این مقاله بسنده نکنید و در این مورد بیشتر یاد بگیرید .

تا جلسه بعد در پناه یکتای بی همتا...


فایلهای ضمیمه
توجه! هیچ فایل ضمیمه ای برای این مطلب یافت نشد

نظرات شما نظر جدید