آشنایی با مفهوم Prototype در جاوا اسکریپت

آشنایی با مفهوم Prototype در جاوا اسکریپت

آشنایی با مفهوم Prototype در جاوا اسکریپت

به زبان ساده هر شیء در زبان جاوا اسکریپت یک prototype دارد و خود prototype نیز یک شیء است. تمام اشیاء جاوا اسکریپتی خصوصیات و متدهایشان را از prototype هایشان به ارث می برند. مثلا زمانی که در حال نوشتن Object literal هستید (یعنی به صورت دستی خودتان یک شیء را بنویسید) prototype شما object.prototype نام دارد. هنگامی که در حال ساخت یک شیء از طریق Constructor ها هستید (کلیدواژه ی new) مسئله متفاوت است.مثلا فرض کنیم یک constructor به نام Person ساختیم بنابراین prototype ما Person.prototype است اما می توانید یک مرحله بالاتر بروید و به object.prototype دسترسی داشته باشید.

جاوا اسکریپت غالباً به عنوان یک زبان مبتنی بر پروتوتایپ خوانده می‌شود که در آن برای ایجاد وراثت، شیئ‌ها دارای یک شیئ‌ پروتوتایپ هستند که به عنوان شیئ‌ قالبی عمل می‌کند و متدها و مشخصات از آن به ارث می‌رسند. یک شیئ‌ پروتوتایپِ شیئ‌ نیز می‌تواند یک شیئ‌ پروتوتایپ داشته باشد که متدها و مشخصاتش را از آن به ارث می‌برد و همین طور تا آخر. این وضعیت غالباً به نام «زنجیره پروتوتایپ» (prototype chain) نامیده می‌شود و توضیح می‌دهد که چرا متدها و مشخصات اشیای مختلف در اشیای دیگری که در اختیار آن‌ها قرار دارد تعریف شده است.

 

const person = {
  name: "Mario"
}

console.log(person);
 

ارث بری از  prototype

همانطور که گفتیم تمام اشیاء جاوا اسکریپتی متدها و خصوصیات خود را از یک prototype به ارث می برند اما مشخص نکردیم از کدام prototype 

Date ها از Date.prototype ارث بری می کنند.
Array ها از  Array.prototype ارث بری می کنند.
Person ها (همان مثال خودمان) از  Person.prototype ارث بری می کنند.
بنابراین قانون کلی به این شکل است که یک شیء از Object.prototype ارث بری دارد.

 

منابع:

https://www.geeksforgeeks.org/prototype-in-javascript/

https://www.w3schools.com/js/js_object_prototypes.asp

 

نویسنده :
مجید پورداود
  • مجید پورداود
  • مهندس نرم افزار و تحلیلگر ارشد سیستم های کامپیوتری تحت وب می باشم. از سال 1395 برنامه نویسی را شروع کردم و به زبان های php (فریم ورک laravel -codeigniter)  و زبان جاوا اسکریپت (فریم ورک express.js-nest.js)  تسلط دارم.  

ثبت دیدگاه جدید

0 دیدگاه

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