پروتوتایپ‌ها در جاوااسکریپت – زنجیرهٔ ارجاع، تفویض ویژگی‌ها، و نقش this در رفتار پویا

پروتوتایپ‌ها در جاوااسکریپت مکانیزمی برای ارجاع ویژگی‌ها بین اشیاء هستند. این مقاله به تعریف زنجیرهٔ پروتوتایپ، نحوهٔ تفویض ویژگی‌ها، تفاوت بین دسترسی و انتساب، و نقش کلیدی this در فراخوانی متدهای ارجاع‌شده می‌پردازد. درک این مفاهیم برای طراحی شی‌گرا و رفتارهای پویا در JS ضروری است.

پروتوتایپزنجیره-ارجاعزنجیره-ارجاعthis

~2 دقیقه مطالعه • بروزرسانی ۲۸ مهر ۱۴۰۴

پروتوتایپ چیست؟


در جاوااسکریپت، پروتوتایپ ویژگی‌ای از اشیاء است که به ارجاع ویژگی‌ها مربوط می‌شود. پروتوتایپ پیوندی پنهان بین دو شیء است که هنگام ساخت شیء ایجاد می‌شود. این پیوند باعث می‌شود اگر شیء فعلی ویژگی‌ای نداشته باشد، آن را از شیء مرجع دریافت کند.


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


وقتی چند شیء به‌صورت زنجیره‌ای به یکدیگر لینک شده باشند، به آن زنجیرهٔ پروتوتایپ گفته می‌شود. این زنجیره امکان همکاری بین اشیاء را فراهم می‌کند.


مثال:


var homework = { topic: "JS" };
homework.toString(); // [object Object]

شیء homework متدی به نام toString ندارد، اما از طریق پروتوتایپ به Object.prototype ارجاع داده می‌شود.


ایجاد پیوند پروتوتایپ با Object.create


var homework = { topic: "JS" };
var otherHomework = Object.create(homework);

otherHomework.topic; // "JS"
otherHomework.topic = "Math";
homework.topic; // "JS"

در این مثال، otherHomework به homework لینک شده، اما با انتساب مستقیم، ویژگی topic روی خود otherHomework ایجاد می‌شود و ویژگی اصلی را shadow می‌کند.


نکته:


Object.create(null) شیئی بدون هیچ پروتوتایپ می‌سازد — کاملاً مستقل.


نقش this در فراخوانی‌های ارجاع‌شده


در جاوااسکریپت، this به زمینهٔ اجرایی وابسته است، نه محل تعریف تابع. این ویژگی باعث می‌شود متدهای ارجاع‌شده از طریق پروتوتایپ همچنان به داده‌های شیء فراخوانی‌کننده دسترسی داشته باشند.


مثال:


var homework = {
  study() {
    console.log(`Please study ${this.topic}`);
  }
};

var jsHomework = Object.create(homework);
jsHomework.topic = "JS";
jsHomework.study(); // Please study JS

var mathHomework = Object.create(homework);
mathHomework.topic = "Math";
mathHomework.study(); // Please study Math

در اینجا، متد study از homework ارجاع داده شده، اما this به شیء فراخوانی‌کننده اشاره دارد — یعنی jsHomework یا mathHomework.


جمع‌بندی


پروتوتایپ‌ها در جاوااسکریپت مکانیزمی قدرتمند برای تفویض ویژگی‌ها و متدها هستند. با استفاده از Object.create می‌توان زنجیره‌های منطقی ساخت. همچنین، رفتار پویا this در فراخوانی متدها باعث می‌شود ارجاع‌ها به‌درستی عمل کنند. شناخت این مفاهیم برای طراحی شی‌گرا و کدهای قابل‌نگهداری ضروری است.


نوشته و پژوهش شده توسط دکتر شاهین صیامی