Object Prototypes
جاوااسکریپت یک زبان مبتنی بر prototype است، یعنی اشیاء (Objects) میتوانند از یکدیگر ویژگیها و متدها را به ارث ببرند.
هر شیء در جاوااسکریپت یک ویژگی مخفی به نام [[Prototype]]
دارد (که میتوان با __proto__
به آن دسترسی پیدا کرد).
1️⃣ ساخت یک شیء ساده
2️⃣ Prototype در فانکشن کانستراکتور
وقتی از constructor function استفاده کنیم، متدها بهتر است داخل prototype
تعریف شوند تا همه اشیاء ساختهشده از آن، به صورت مشترک به متد دسترسی داشته باشند (و حافظه هدر نرود).
👉 اینجا متد sayHello
در حافظه فقط یکبار ساخته شده و همه اشیاء از طریق پروتوتایپ بهش دسترسی دارن.
3️⃣ زنجیره پروتوتایپ (Prototype Chain)
اگر یک ویژگی یا متد در خود شیء وجود نداشته باشد، جاوااسکریپت میرود و در پروتوتایپ شیء دنبالش میگردد.
این زنجیره ادامه پیدا میکند تا به Object.prototype
برسیم.
4️⃣ استفاده با class
(سینتکس مدرن)
در ES6 به بعد، استفاده از class
راحتتر شد ولی پشتصحنه همان prototype است.
5️⃣ اضافه کردن متد جدید به Prototype حتی بعد از ساخت شیء
📌 نکات مهم
-
Prototype chain مثل وراثت کلاسها در زبانهای دیگر است.
-
تمام آبجکتها در نهایت از
Object.prototype
ارث میبرند. -
استفاده از prototype باعث بهینهسازی حافظه میشود.
-
سینتکس
class
در واقع sugar syntax برای prototype است.