آبجکت لیترال‌ها در جاوا اسکریپت

آبجکت لیترال لیستی از جفت name-value هایی است که با کاما از هم جدا میشن و درون curly brace یا ({}) قرار دارند. valueها میتونن خصوصیات (properties) و توابع (functions) باشند. در قطعه کد زیر آبجکت لیترالی با یک property و یک function رو مشاهده می‌کنید :

an object literal with one property and one value
an object literal with one property and one value

و در قطعه کد زیر از آبجکتی که ایجاد کردیم برای لاگ (log) کردن fullName و فراخوانی (call) متد Greet با مقدار fullName استفاده می‌کنیم :

فرض کنید می‌خواهیم که به خصوصیت fullName داخل متد Greet دسترسی داشته باشیم، به جای اینکه اون رو از یک پارامتر بخونیم . اگر بخوایم به این روش بهش دسترسی داشته باشیم خطای ReferenceError fullName is not defined دریافت میکنیم :

به جای این‌کار می‌توان تابعی به نام ()getFullName ایجاد کرد که به مقدار پراپرتی fullName از طریق this

دسترسی دارد :

و خروجی قطعه کد بالا مطابق زیر خواهد بود :

تمامی اعضای یک آبجکت لیترال ( چه property و چه value ) عمومی هستند. تنها جایی که می‌توانید یک عضو را به صورت خصوصی تعریف کنید درون یک تابع است. برای مثال در قطعه کد زیر یک متغیر خصوصی درون متد Greet تعریف کرده‌ایم تا پیام (message) را کاستومایزتر کنیم :

متغیر customeMessage فقط در اسکوپ متد Greet قابل دسترسی است، اما اگر خارج از این متد و به عنوان یک خصوصیت (property) قرار گرفته بود دارای دسترسی عمومی بود.

تخصیص یک آبجکت لیترال به یک متغیر دیگر تنها یک کپی سطحی ایجاد می‌شود یعنی یک متغیر ساخته می‌شود و به مکانی در حافظه، که مقدار متغیر قبلی در آن قرار گرفته است، اشاره می‌کند. پس اگر شما مقدار متغیر اول را تغییر دهید، متغیر دوم هم تغییر می‌کند. و همین‌طور اگر مقدار متغیر دوم را تغییر دهید، مقدار متغیر اول هم تغییر می‌کند، یعنی به جای خود مقدار (value) یک رفرنس از آن دریافت می‌کنید.

فرضا می‌خواهیم با استفاده از آبجکتی که تا کنون ایجاد کردیم (greetings) یک آبجکت دیگر به نام anotherGreeting ایجاد کنیم :

انجام این‌کار ممکن است در وهله اول بدون اشکال به نظر برسد، اما نکته اینجاست که هر تغییری در anotherGreeting رخ دهد در greetings نیز اعمال خواهد شد :

و در آخر، می‌تونید اعضای یک آبجکت لیترال رو دستکاری کنید، یعنی می‌تونید اون‌ها رو به دلخواه خودتون و مثل قطعه کد زیر حذف یا اضافه کنید :

آبجکت لیترال‌ها باید در مواقعی استفاده بشن که نمی‌خواهید مقادیر (values) اون‌ها رو در یک آبجکت دیگه کپی کنید . اگر هم به نمونه‌های متعدد (multiple instances) از آبجکتی خاص احتیاج دارید از سازنده یا constructor استفاده کنید.