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