متدهای prototype
متدهای Prototype در جاوااسکریپت
مفهوم Prototype یکی از پایهایترین مفاهیم در جاوااسکریپت است که به اشیا اجازه میدهد ویژگیها و متدها را به اشتراک بگذارند. این مکانیسم هسته اصلی وراثت پروتوتایپی در جاوااسکریپت محسوب میشود.
تمامی اشیا در جاوااسکریپت دارای یک پروتوتایپ هستند که میتواند شامل متدها و ویژگیهای مشترک باشد.
چرا از Prototype استفاده میکنیم؟
- بهینهسازی حافظه (عدم تکرار متدها برای هر نمونه)
- اجرای الگوی طراحی وراثت
- افزایش عملکرد برنامه
- قابلیت گسترش اشیا استاندارد
متد | توضیحات |
---|---|
Object.create() |
ایجاد شی جدید با پروتوتایپ مشخص |
Object.getPrototypeOf() |
دریافت پروتوتایپ یک شی |
Object.setPrototypeOf() |
تنظیم پروتوتایپ برای یک شی |
مثال عملی
در مثال زیر یک سازنده (Constructor) برای اشیای کاربر تعریف کردهایم:
function User(name, age) { this.name = name; this.age = age; } User.prototype.greet = function() { return `سلام، من ${this.name} هستم!`; }; const user1 = new User('علی', 30); console.log(user1.greet()); // خروجی: سلام، من علی هستم!
همانطور که میبینید، متد greet به پروتوتایپ اضافه شده و تمام نمونههای User به آن دسترسی دارند.
زنجیره پروتوتایپی
زمانی که ویژگی یا متدی روی یک شی جستجو میشود، جاوااسکریپت این مراحل را دنبال میکند:
- جستجو در خود شی
- جستجو در پروتوتایپ شی
- جستجو در پروتوتایپ والد (تا رسیدن به Object.prototype)
- در صورت عدم یافتن، مقدار undefined برگردانده میشود
برای اطلاعات بیشتر درباره سازندههای شیء در جاوااسکریپت میتوانید اینجا را چک کنید.
نکات مهم
- پروتوتایپها زنده هستند - تغییرات بلافاصله روی تمام نمونهها اعمال میشود
- استفاده از
Object.create(null)
شیای بدون پروتوتایپ ایجاد میکند - کلاسهای ES6 در واقع syntactic sugar برای پروتوتایپها هستند
- تغییر پروتوتایپ اشیا استاندارد (مانند Array) توصیه نمیشود