درس نهم- آبجکتها و حلقه for in
در درسهای گذشته پیرامون انواع دادهها در جاوا اسکریپت صحبت کردیم و دادههایی مانند عدد، رشته، منطقی، آبجکت و آرایه را معرفی نمودیم. در این درس میخواهیم با نگاهی عمیقتر به مفاهیم آبجکتها پرداخته و شرح آنها را تکمیل کنیم.
آبجکت در جاوا اسکریپت
در درس پنجم (درس آبجکتها) در مورد آبجکتها در جاوا اسکریپت شرح دادیم و گفتیم که بطور تقریبی همه چیز در جاوا اسکریپت آبجکت هستند؛ حتی انواع دادههای نخستین مانند رشتهها؛ البته به غیر از null و undefined، علاوه بر آن شما میتوانید آبجکتی را
برای خودتان بسازید. نکتهای که باید به آن توجه کنید اینست که هر کدام از
انواع دادههای نخستین میتوانند هم به شکل سنتی (نوع نخستین دادهها) و
هم به شکل آبجکت مورد استفاده قرار گیرند. این بدان معنی ست که دادهها را هم میتوان بشکل همیشگی آن استفاده کرد و هم میتوان آنها را به عنوان یک آبجکت معرفی کرد با این تفاوت که وقتی آنها را به شکل آبجکت معرفی میکنیم دادهها دارای «ویژگی» و «متد» میشوند.
گفتیم یک آبجکت نوعی خاصی از داده است که دارای «ویژگی» و «متد» است و این دو فاکتور توانایی بالایی برای بکارگیری دادهها به ما میدهند. ویژگیها مقادیری هستند که به آبجکت نسبت داده میشوند و متدها عملهایی هستند که بر روی آبجکت انجام میشوند.
ساخت یک آبجکت
برای ساخت آبجکت کافیست به شکل زیر عمل کنید:
person = new Object() ;
به این ترتیب ما یک آبجکت با نام person ساختیم که میتواند دارای ویژگیهای خاص خود باشد. برای ساخت ویژگی و نسبت دادن مقدار به آنها به شکل زیر عمل میکنیم:
person.firstname =" پیمان " ;
person.lastname=" ایرانی ";
person.age= 30 ;
برای دسترسی به ویژگیهای آبجکت ساخته شده به دو صورت میتوانیم عمل کنیم:
یکم: دسترسی به ویژگیها بصورت تک به تک:
alert (person.firstname) ;
همانطور که میبینید با آوردن «نام آبجکت. نام ویژگی» میتوانیم به آن دسترسی پیدا کنیم.
دوم: نوع دیگر کار با آبجکتها استفاده از حلقه (for in) در دسترسی به ویژگیهای آبجکت است که این عمل دسترسی به همه آنها را بصورت یکباره و نه تک به تک میسر میسازد و کار با آبجکتها را برای ما بسیار ساده میکند:
for (x in person) {
document.write(person[x]);
}
x متغیری ست که مقادیر داخل آبجکت در هر تکرار حلقه در داخل آن قرار میگیرند.
x in person نحوه اشاره به مقادیر در هر دور تکرار حلقه است.
person[x] شیوه دسترسی به ویژگیهای آبجکت در زمان استفاده از حلقه است.
استفاده از حلقه برای دسترسی به ویژگیهای آبجکت
برای دسترسی به ویژگیهای یک آبجکت با استفاده از حلقه به شکل زیر عمل میکنیم:
<!DOCTYPE html>
<html> <head> </head>
<body>
<script>
person = new Object() ;
person.firstname =" پیمان " ;
person.lastname =" ایرانی ";
person.age = 30 ;
for (x in person) {
document.write ( person[x] + "<br />" ) ;
}
</script>
</body> </html>
در نمونه ذکر شده ابتدا یک آبجکت با نام (person) ساخته شده و بعد مقادیری به ویژگیهای ساخته شده نسبت داده شده است. سپس توسط حلقه for in دادههای نسبت داده شده به آبجکت چاپ شده است:
for (x in person) {
document.write ( person[x] + "<br />" ) ;
}
سازنده آبجکت Object Constructor
«سازنده آبجکت» یک تابع است که میتوان با کمک آن یک آبجکت ساخته و مقادیری را به ویژگیها و متدهای آن اختصاص داد. بعد از ساخت «سازنده آبجکت» تنها با گرفتن نمونه از «سازنده» میتوان یک آبجکت ساخت. بدین شکل میتوان نمونههای بسیاری از روی سازنده ساخت:
function person ( firstname, lastname, age )
{
this.firstname = firstname ;
this.lastname = lastname ;
this.age = age ;
}
با تابع (سازنده آبجکت) ساخته شده در بالا توانایی نمونه سازیهای متفاوت تنها از روی این سازنده را بهمراه ویژگیهای داخل آن پیدا میکنیم. برای نمونه سازی از روی آن کافیست به شکل زیر عمل کنیم:
var person1 = new person ( "پیمان" , "ایرانی" , 35 );
var person2 = new person ( "شهروز" , "تهرانی" , 34 );
همانطور که میبینید «دو» نمونه آبجکت از روی «سازنده آبجکت» ساخته شده و برای ویژگیهای هر کدام مقادیر متفاوتی نسبت داده شده است. پس بوجود آوردن یک «سازنده آبجکت» در ساختن آبجکتهای متفاوت از روی یک نمونه، کارایی دارد و به ما کمک میکند تا با داشتن یک الگو نمونههای بسیاری را برای خود بسازیم. فرض کنید که برنامهای برای نگهداری مشخصات کاربران تارنمای خود میسازید، با این فن شما براحتی و تنها با داشتن یک «سازنده آبجکت» هر زمان که خواستید مشخصاتی را نگهداری کنید تنها با نمونه سازی از روی «سازنده آبجکت» یک آبجکت تازه بسازید.
اضافه کردن متد به آبجکت
در قسمت پیشین دیدیم که چطور میشود ویژگیهایی را به یک آبجکت نسبت داد و مقادیری را در آن انتساب کرد. حال میخواهیم برای یک آبجکت متدی را ساخته و بدان نسبت دهیم. متدها در اصل همان توابع هستند که به یک آبجکت نسبت داده میشوند. این کار را با کمک «سازنده آبجکت» و در درون آن انجام میدهیم:
function person ( firstname , lastname , age ) {
this.firstname = firstname;
this.lastname = lastname;
this.age = age ;
this.changeName = changeName;
function changeName (name)
{
this. firstname = name ;
}
}
در داخل «آبجکت سازنده» متدی با نام «changeName» تعریف کرده و در داخل آن عملیاتی (تغییر نام) را نوشتهایم.
function changeName (name)
{
this. firstname = name ;
}
نکته: عبارت this در this. firstname برای اشاره کردن به ویژگی مورد نظر در تابع لازم است. چراکه ما از این تابع برای تغییر نامهای بسیاری استفاده میکنیم و با استفاده از این عبارت به نام خاصی اشاره نمیکنیم بلکه هر بار که تغییرات لازم بود تنها با آوردن نام آبجکت مورد نظر عملیات بصورت عمومی و برای همه نامها انجام میشود.
حال با فراخواندن نام متد میتوانیم عملیات مورد نظر را انجام دهیم.
person1.changeName("پژمان");
person2.changeName("شهرام");
در کدهای بالا میبینید که با آوردن نام آبجکت و نام متد، موفق به تغییر هر دو نام میشویم. حال میخواهیم با نوشتن کامل کدها ابتدا آبجکتی تعریف کرده و در داخل آن مقادیری را نسبت دهیم و بعد آنها را چاپ کنیم. در ادامه با کمک متد (changeName) نام یکی از آبجکتها را تغییر داده و دوباره خروجی آن را چاپ میکنیم تا تغییر ایجادی توسط تابع را مشاهده کنیم:
<!DOCTYPE html>
<html> <head> <script>
function person ( firstname , lastname , age ) {
this.firstname = firstname ;
this.lastname = lastname ;
this.age = age ;
this.changeName = changeName ;
function changeName (name) {
this.firstname = name ;
} }
</script> </head>
<body>
<script>
var person1 = new person ( "پیمان" , "ایرانی" , 35 );
document.write( " <br />" + person1.firstname + "<br />" ) ;
person1.changeName("پژمان") ;
document.write( " <br />" + person1.firstname + "<br />" ) ;
</script>
</body>
</html>
با مروری بر کدهای نوشته شده تغییر انجام شده توسط تابع changeName را مشاهده میکنیم.
از تمام دوستانی که در blog.ir وبلاگ دارند دعوت به عمل می آید.
هر یک از شما میتوانید یک سوال و جواب آن را برای ما ارسال کنید تا با نام خودتان همراه با لینک وبلاگ شما در ویکی سوال به نمایش درآید.
مزایای این کار:
ابتدا اینکه اینکار به رواج blog.ir کمک خواهد کرد و توان رقابتی ما با سایر سرویس های وبلاگدهی افزایش پیدا خواهد کرد.
با اینکار یک پست در ویکی سوال با نام شما و وبلاگتان همراه با کلمات کلیدی شما به نمایش درخواهد آمد که این خود افزایش بازدید شما را در پی خواهد داشت.
ویکی سوال نیز آمادگی خود را برای ارسال مطالب دلخواه شما اعلام میکند.
تمام بلاگ هایی که با ویکی سوال همکاری داشته باشند در ویکی سوال لینک خواهند شد.(البته اگر خواهان تبادل لینک با ویکی سوال باشید)
و در آخر اگر خودمان هوای خودمان را نداشته باشیم پس نباید انتظار پیشرفت در این امر را داشته باشیم.
در صورت تمایل در قسمت نظرات همین پست ما را مطلع کنید