متدهای 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 به آن دسترسی دارند.


زنجیره پروتوتایپی

زمانی که ویژگی یا متدی روی یک شی جستجو می‌شود، جاوااسکریپت این مراحل را دنبال می‌کند:

  1. جستجو در خود شی
  2. جستجو در پروتوتایپ شی
  3. جستجو در پروتوتایپ والد (تا رسیدن به Object.prototype)
  4. در صورت عدم یافتن، مقدار undefined برگردانده می‌شود

برای اطلاعات بیشتر درباره سازنده‌های شیء در جاوااسکریپت می‌توانید اینجا را چک کنید.

نکات مهم

  • پروتوتایپ‌ها زنده هستند - تغییرات بلافاصله روی تمام نمونه‌ها اعمال می‌شود
  • استفاده از Object.create(null) شی‌ای بدون پروتوتایپ ایجاد می‌کند
  • کلاس‌های ES6 در واقع syntactic sugar برای پروتوتایپ‌ها هستند
  • تغییر پروتوتایپ اشیا استاندارد (مانند Array) توصیه نمی‌شود