Mohammad Bohluli
Mohammad Bohluli
خواندن ۲ دقیقه·۶ ماه پیش

شی گرایی قسمت سوم (prototype chain)

به قسمت سوم شی گرایی در جاواسکریپت خوش اومدی

توی این قسمت میخوایم در رابطه با زنجیره پروتوتایپ(prototype chain) حرف بزنیم و ببینیم چطور کار میکنه

اگه scope chain رو فهمیده باشید و باهاش آشنا باشید، prototype chain رو خیلی راحت تر میفهمید

توی این مقاله راجع به scope chain کامل بحث کردیم. فقط تنها فرقش اینه اونجا دنبال اسکوپ یه متغییر میگشتیم اما این جا داریم دنبال method یا property میگردیم

خب، از مقاله قبل به یاد دارید که هر آبجکت توی جاواسکریپت یک prototype داره، جاواسکریپت وقتی میخواد یک متد یا پراپرتی که شما صدا میزنید اجرا کنه میره تا دنبال اون متد یا پراپرتی بگرده و براتون اجراش کنه

اما این جست و جو چطوری هست ؟ به سختی🙃

وقتی شما به متد یا پراپرتی رو صدا میزنید جاواسکریپت میره توی پروتوتایپ دنبالش میگرده، در وهله اول توی خود ابجکت به دنبال اون method میگرده اگه بودش که هیچی اگه نبود میره یک مرحله بالا تر یعنی پروتوتایپ والدش میگرده، اینقدر میره بالا تر تا به null برسه

اجزا بدین یک مثال بزنم و همزمان موقع خوندن عکس زیر رو هم نگاه کنید(منبع عکس PDF جوناس):

این کد رو در نظر بگیرید:

jonas.hasOwnProperty(&quotname&quot);

خب آبجکت jonas ما که متدی به اسم hasOwnProperty نداره پس چطور این کد اجرا میشه ؟🤔

در وهله اول جاواسکریپت توی خود ابجکت jonas رو میگرده ببینه این متد هستش یا نه، میبینه ای دل غافل اینجا که نیستش پس چیکار کنیم ؟ میریم سر وقت _ _ proto _ _ و خب _ _ proto _ _ هم به چی اشاره(ارث بری) میکنه؟ آفرین، به Person.prototype پس میره یه مرحله بالاتر تا Person.prototype رو بگرده و ازش بپرسه آقا شما متدی با این hasOwnProperty اسم داری ؟ اونم میگه نه متاسفانه🥲

جاواسکریپت باز میره سر وقت _ _ proto _ _ و خب _ _ proto _ _ که داره به ایشون یعنی Object.prototype اشاره(ارث بری) میکنه، میره میپرسه آقای Object.prototype شما این متد رو داری hasOwnProperty اونم میگه بله که دارم، پس جاواسکریپت میره و ازش استفاده میکنه و صداش میزنه، به همین راحتی، انقدر میره از بالاسری میپرسه تا متد یا پراپرتی مورد نظر رو پیداش کنه

حالا فرض کنید Object.prototype هم متد hasOwnProperty رو نداشت، اون وقت چی میشد ؟ هیچی null برمیگشت و میگفت اصلا چنین چیزی وجود نداره

کد زیر هم گویای همه چیزه :

jonas.__proto__ 👉 Person.prototype jonas.__proto__.__proto__ 👉 Object.prototype jonas.__proto__.__proto__.__proto__👉 null


این بحث رو همینجا تموم میکنیم تا خیلی طولانی نشه، امیدوارم لذت برده باشید❤️

کانال تلگرامم 👈 LearnByLearn@

جاواسکریپتشی گراییبرنامه نویسی
علاقمند به تکونولوژی و هرچی که بهش مربوطه، کانال تلگرام LearnByLearn@
شاید از این پست‌ها خوشتان بیاید