پروتوتایپ‌ها در جاوااسکریپت – زنجیرهٔ ارجاع، تفویض ویژگی‌ها، و نقش 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 در فراخوانی متدها باعث می‌شود ارجاع‌ها به‌درستی عمل کنند. شناخت این مفاهیم برای طراحی شی‌گرا و کدهای قابل‌نگهداری ضروری است.


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

مقالات مرتبط

نحوهٔ میزبانی مستقل اپلیکیشن Next.js – پیکربندی، کشینگ، و استراتژی‌های استقرار

nextjs-self-hosting-deployment-cache-isr-proxy-env

ادامه

مقایسه‌های شرطی تبدیل‌پذیر و کلاس‌های پروتوتایپی در جاوااسکریپت – درک دقیق رفتار شرطی و ساختارهای ارث‌بری

این مقاله دو موضوع مهم از ضمیمهٔ A کتاب YDKJSY را بررسی می‌کند: نحوهٔ تبدیل نوع در عبارات شرطی مانند if و while، و الگوی کلاس‌های پروتوتایپی به‌عنوان پیش‌زمینه‌ای برای کلاس‌های ES6. با مثال‌های عملی، تفاوت بین مقایسه‌های دقیق و تبدیل‌پذیر، و نحوهٔ تفویض رفتار از طریق زنجیرهٔ پروتوتایپ روشن می‌شود.

ادامه

در جاوااسکریپت – تفاوت مقدار و مرجع، و فرم‌های متنوع تعریف تابع

در جاوااسکریپت – تفاوت مقدار و مرجع، و فرم‌های متنوع تعریف تابع

ادامه

Closure و this در جاوااسکریپت – حافظهٔ دامنه و زمینهٔ اجرایی در توابع

Closure و this دو مفهوم بنیادی و گاه گیج‌کننده در جاوااسکریپت هستند. این مقاله به تعریف دقیق closure به‌عنوان حافظهٔ متغیرهای بیرونی در توابع، و بررسی رفتار پویا و وابسته به نحوهٔ فراخوانی در this می‌پردازد. با مثال‌های عملی، تفاوت بین دامنهٔ ثابت و زمینهٔ اجرایی پویا روشن می‌شود.

ادامه

تکرار در جاوااسکریپت – الگوی Iterator، ساختارهای قابل‌تکرار، و مصرف استاندارد داده‌ها

تکرار در جاوااسکریپت – الگوی Iterator، ساختارهای قابل‌تکرار، و مصرف استاندارد داده‌ها

ادامه

ماژول‌ها در جاوااسکریپت – از الگوی کلاسیک تا ES Modules و تفاوت‌های ساختاری

ماژول‌ها در جاوااسکریپت مانند کلاس‌ها برای گروه‌بندی داده و رفتار در واحدهای منطقی طراحی شده‌اند. این مقاله به بررسی الگوی کلاسیک ماژول‌ها با توابع کارخانه‌ای، تفاوت آن با کلاس‌ها، و معرفی ES Modules در ES6 می‌پردازد. همچنین به نحوهٔ استفاده، صادرات، و وارد کردن ماژول‌ها و تفاوت در نمونه‌سازی اشاره می‌شو

ادامه