
ویدیو این گفتار را در لینک های زیر می توانید، مشاهده بفرمایید.
یوتیوب
آپارات
اشیاء (Objects) در جاوا اسکریپت
جاوااسکریپت یک زبان شی گرا است اما مانند سایر زبان های برنامه نویسی شی گرا بر پایه کلاس نیست.
آیجکت ها مانند سایر برنامه نویسی ها شی گرا مجموعه ای از ویژگیها (Property) و عملکردها (Functionality) و یا همان متدها است.
ایجاد آبجکت ها به صورت زیر می باشد و همانطور که مشاهده می فرمایید، آبجکت ها در جاوااسکریپت به صورت key و value هستند.
var myObj={ name:"ali", familyName:"alavi", age:"30" } console.log(myObj)
توجه : آبجکت ها می توانند متد داشته باشند اما با روش معمول فرق دارند و متد در آبجکت ها را در قسمت فانکشن ها توضیح خواهیم داد.
در جاوااسکریپت نوع ويژگی ها مانند سایر برنامه نویسی های شی گرا به صورت Public و Private نیست و به عبارتی تمام ویژگی ها Public هستند.
دسترسی به دو صورت زیر انجام می پذیرد.
مثال:
var myObj={ name:"ali", familyName:"alavi", age:"30" } //access property with dot console.log(myObj.name) //"ali" //access property with [] console.log(myObj["name"]) //"ali"
توجه :اگر ویژگی (property) وجود نداشته باشد، دسترسی به آن منجر به خطا نمیگردد و undefined برگردانده میشود.
فرق بین این دو روش دسترسی چیست؟
ممکن است اسم property یک کلمه رزرو باشد و تو این حالت از طریق نقطه نمی توانید دسترسی پیدا کنید و تنها راه از طریق براکت است مثال ذیل:
var myObj={ "1":"30" } // console.log(myObj.1) //error console.log(myObj["1"]) // "30"
و حالت دیگر این است که ممکن است از طریق متغییر و داینامیک بخواهیم به property آبجکت دسترسی پیدا نماییم که در این حالت هم مانند مثال زیر تنها راه از طریق براکت است.
var myObj={ name:"30" } var xxx = "name" console.log(myObj[xxx]) //"30"
مقدار property همانطور که می تواند دارای هر نوع دادهی primitive باشد همچنین می تواند دارای مقدار آبجکت نیز باشد و یا به عبارتی هر آبجکت می توانید property هایی داشته باشید که خود یک آبجکت باشد و به این حالت که یک ویژگی خود دارای مقدار آبجکت باشد، آبجکت ها ی تو در تو گفته می شود.
var myObj = { name:"ali", family:"alavi", age:"30", address:{ city:"tehran", ave:"xxxxxx" } }
دسترسی به آبجکت های تو در تو به شکل زیر است.
console.log(myobj.address.city) // tehran or console.log(myobj.address["city"] // tehran
همانطور که در قسمت قبلی عرض شد، آبجکت ها دارای نوع داده Reference هستند، به این معنی است که در بیشتر زبان های برنامه نویسی Object به یک فضای حافظه Heap اشاره دارند و اگر دو آبکجت را مساوی هم قرار دهیم، دو آبکجت به یک فضای حافظه اشاره دارند و اگر یکی را تغییر دهیم دیگر نیز تغییر خواهد کرد و این تفاوت نوع داده primitive و reference می باشد مثل ذیل:
var myObj={ name:"ali", family:"alavi", age:"30" } var myObj2 = myObj; myObj.name="hassan" console.log(myObj.name); //"hassan" console.log(myObj2.name); //"hassan"
در اینجا قسمت آبجکت ها را به اتمام می رسانیم و در قسمت بعدی به نکتههای آرایهها در جاوااسکریپت میپردازیم.