اشیا (objects) در جاوا اسکریپت

اگر بخواهیم یک تعریف ساده از از یک شی در جاوا اسکریپت ارائه دهیم باید بگوییم که شی محلی است که یک سری اطلاعات مربوط به هم در آن ذخیره خواهند شد.این قابلیت به ما این امکان را می‌دهد که چیزهای واقعی در اطرافمان را به صورت مدل در آوریم.برای مثال،کتاب،ماشین،انسان و … .برای کتاب مثلا داده هایی مثل نام کتاب،نام نویسنده و قیمت کتاب را می‌توان در یک شی کتاب ذخیره کرد و برای ماشین هم می‌توان چیزهایی مثل رنگ،مدل و … را در آن ذخیره کرد.

کد زیر نحوه تعریف یک شی ساده را به اسم myBook با خصوصیاتی شامل نام،نام نویسنده و تعداد صفحه نشان می‌دهد.همچنین بعد از تعریف شی به وسیله console.log روی صفحه چاپ شده است:

خروجی کد بالا به شکل زیر خواهد شد:
obj
همچنین اگر بخواهید به هر کدام از خصوصیات شی دسترسی داشته باشید به شکل زیر عمل می‌کنیم:

به عبارتی با استفاده از اسم شی + . +اسم خصوصیت مورد نظر:

خروجی کد بالا به شکل زیر خواهد بود:

javascript-obj

برای تغییر یک خصوصیت در یک شی به شکل زیر عمل خواهیم کرد:

اگر دقت کنید در خط ۹ به title شی myBook دسترسی پیدا کرده‌ایم و سپس مقدار آن را تغییر داده‌ایم.همچنین اگر دقت کنید در این مثال برای چاپ موارد بر روی صفحه از String template استفاده کرده‌ایم.

تمرین:یک شی جدید به اسم person بسازید که شامل خصوصیات زیر باشد

name

age

location

همچنین با استفاده از  String template خصوصیات شی را روی صفحه چاپ کنید.

برای دیدن جواب روی این آدرس کلیک کنید.

استفاده از اشیا به عنوان ورودی توابع

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


در کد بالا با یک تابع  به اسم printInfo تعریف کرده‌ایم که به عنوان ورودی یک شی به نام person را دریافت می‌کند و در داخل تابع سعی می‌کند که اطلاعات آن را چاپ کند.

استفاده اشیا به عنوان خروجی در توابع

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


تابع getInfo به عنوان ورودی دریافت می‌شود که از طریق اطلاعات آن شی یک شی جدید ساخته می‌شود و به عنوان خروجی برگردانده می‌شود.همچنین در ادامه نیز دو بار تابع getInfo توسط دو شی متفاوت فراخوانی  و نتیجه آنها در دو متغیر جدید ذخیره شده و دست آخر هم روی صفحه چاپ شده‌اند.

obj

Java Script call by reference

اگر به کد زیر دقت کنید:

یک شی به اسم person و همچنین یک تابع به اسم addAge داریم که یک person به عنوان ورودی می‌گیرد و به سن آن یکی اضافه می‌کند و سن را چاپ می‌کند.

همچنین در خط ۹ تابع addAge را صدا زده‌ایم و سپس مقدار سن را چاپ کرده‌ایم:

obj-ref

سوال: چرا تغییرات داخل تابع روی شی person در بیرون تابع نمود پیدا کرده؟دلیل آن این است که در جاوا اسکریپت زمانیکه یک متغیر را به عنوان ورودی به یک تابع پاس می‌دهیم،یک کپی مجزا از آن را پاس نمی‌دهیم بلکه یک اشاره گر به آن متغیر را پاس می‌دهیم و در داخلی تابع اگر خصوصیات آن شی تغییر کند در بیرون از تابع قابل مشاهده است.

نکته:اگر به جای اینکه خصوصیات یک شی را تغییر دهید،خود شی را تغییر دهید این تغییر در بیرون از تابع مشخص نمی‌شود:

obj-ref.js

اگر دقت کنید با اینکه ما شی را داخل تابع خالی کرده‌ایم شی person هنوز مثل اول وجود دارد و از بین نرفته.

به کد زیر دقت کنید:

ما یک شی جدید به اسم shahrooz ساخته‌ایم و آن را برابر با person قرار داده‌ایم.در ادامه به جای اینکه شی person را به تابع addAge پاس کنیم،شی shahrooz را به آن پاس کرده ایم و در خط آخر مقدار age شی person را چاپ کرده‌ایم.

obj-ref

اگر به خروجی دقت کنید متوجه می‌شوید با اینکه تغییرات روی شی shahrooz انجام شده ولی نتیجه آن روی person هم قابل مشاهده است.این به این دلیل است که در واقع دو شی shahrooz و person در واقع یک شی هستند.

در قسمت بعدی در رابطه با متد ها در جاوا اسکریپت صحبت خواهیم کرد.

1 پاسخ به اشیا (objects) در جاوا اسکریپت

  1. پویا می‌گوید:

    میشه لطفا بگید از روی یک شی چطوری میشه شی جدید و مجزایی ایجاد کرد؟

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

This site uses Akismet to reduce spam. Learn how your comment data is processed.