Bamdad
Bamdad
خواندن ۳ دقیقه·۵ سال پیش

پروتوتایپ‌های جاوااسکریپت

وقتی به طور کلی از مفهوم کلاس‌ها تو برنامه‌نویسی صحبت میکنیم، معمولا این مثال میاد وسط که خود کلاس مثل یه نقشه‌س و اون نمونه یا  instance ای که ازش میسازیم، یه نمونه پیاده سازی شده از اون نقشه‌س. یعنی برای مثال اگه کلاس صندلی داریم، مثل نقشه ساخت صندلیه. وقتی از روی اون نقشه یکی بسازیم خود صندلیه. حالا وقتی یه صندلی ساختیم، اگه از نقشه پشتیشو حذف کنیم، پشتی صندلیمون از بین میره؟ یا اگه به صندلی‌مون یه کفی نرم اضافه کنیم به نقشه‌مون اضافه میشه؟ نه طبیعتا. پس انگار از روی نقشه یه کپی گرفتیم، یعنی همون اول یه رابطه اولیه دارن ولی بعدش کاملا جدا هستن. این رابطه اولیه میتونه با به ارث بردن بیشتری همراه باشه. همون طور که میدونیم مفهوم وراثت تو برنامه‌نویسی شی‌گرا
(یا حالا خیلیا بهش میگن کلاس گرا یا class oriented) محبوبه. اونم مثل اینه که من که فرزند پدرمم ازش خیلی چیز ها به ارث بردم و اون ارتباط اولیه بوده، ولی اگه من الان پام بشکنه پای پدرم نمیشکنه! حالا این که بگیم از کلاس به instance ها کپی میشن یه مشکل رو بهمون نشون میده، توی جاوااسکریپت چیزی کپی نمیشه! برای همینه که بخش کلاس‌های جاوااسکریپت همیشه اون جوری که توقع داریم عمل نمیکنن و مثل مفاهیم کلاس‌ها تو جاوا یا ++c نیستن. عملا تلاش شده تا جاوااسکریپت از کلاس‌ها ساپورت کنه با این وجود که از پایه یه جور دیگه عمل میکنه. ما تا ابزارمون رو به اندازه کافی نشناسیم باید توقع باگ رو داشته باشیم. پس بیاین ببینیم حالا که نمیتونه کپی کنه چطوری عمل میکنه.

حقیقت اینه که وقتی تو جاوااسکریپت یه نمونه از روی کلاس میسازیم، میاد یه آبجکت خالی برامون میسازه و اون رو به نقشه اصلیش، پروتوتایپش، لینک میکنه. این لینک میکنه تمام قشنگی عملکردشه. خود کلاس یه آبجکته. آبجکت‌ها یه عضو یا property دارن به نام prototype. توی پروتوتایپ به صورت پیش فرض کلی متد و متغیر هست. برای مثال toString توی پروتوتایپ آبجکته. گفتم وقتی از روی کلاس یه نمونه میسازیم میاد یه آبجکت خالی میسازه. این آبجکت هم خودش پروتوتایپ داره. حالا جایگزین اون عمل کپی کردن تو جاوااسکریپت اینه که میاد پروتوتایپ آبجکت رو به پروتوتایپ نقشه‌ش، کلاسش وصل میکنه! برای همین اگه ده ها نمونه از روی کلاسمون بسازیم، عملا پروتوتایپ تک تک این ابجکت‌ها به پروتوتایپ کلاسشون وصلن. با همین نگاه میشه وراثت تو خود کلاس‌ها رو هم دید. وقتی یه کلاس مادر داریم و یه کلاس فرزند میسازیم که از کلاس مادر به ارث میبره، عملا داریم یه ارتباطی بین پروتوتایپ فرزند با پروتوتایپ مادر میسازیم; برای همین property ها بینشون مشترک میشه و از فرزند بهشون دسترسی داریم. حالا ما در عین حال میتونیم این property ها رو بازنویسی هم بکنیم. یعنی اگه دوباره بهش مقدار بدیم، مقدار قبلیشو از دست میده و مقدار جدید میگیره.

javascriptprogrammingcomputeritdevelopment
شاید از این پست‌ها خوشتان بیاید