في هذا الدرس 5تصفّح المواضيع
داخل الدوال القياسية في JavaScript لا تشير الكلمة المحجوزة this بصورة جامدة إلى مكان كتابة الدالة، بل تمثل سياق التنفيذ (Execution Context) أي الكائن المستقبِل الذي يتحدد لحظة تشغيلها. وفي كثير من البرامج نكتب دالة خدمة واحدة ونرغب في تشغيلها على بيانات عدة كائنات مختلفة دون نسخ الدالة داخل كل كائن.
بما أن كل دالة في JavaScript هي كائن متكامل، فإنها تمتلك أسلوباً مدمجاً يُدعى .call(thisArg). يؤدي استدعاء fn.call(targetObj) إلى تشغيل الدالة fn في الحال مع توجيه الكلمة this بداخلها لتشير صراحةً إلى الكائن targetObj خلال هذه الاستدعاءة:
| طريقة التشغيل | الكائن الذي تشير إليه this | المرونة مع الكائنات الأخرى |
|---|---|---|
branchA.describe() | تلقائياً الكائن branchA قبل النقطة | تعمل فقط إذا كانت الدالة مخزنة داخل الكائن |
describe.call(branchB) | صراحةً الكائن branchB المرسل أولاً | تعمل مع أي كائن يمتلك نفس أسماء خصائص البيانات |
function readBadge() {
return this.city + ' Hub (#' + this.code + ')';
}
const hubA = { city: 'Riyadh', code: 101 };
const hubB = { city: 'Jeddah', code: 204 };
document.getElementById('call-out').textContent = readBadge.call(hubB);
عندما تطلب الدالة معاملات إضافية إلى جانب سياق this، نمررها إلى .call() مفردةً واحداً تلو الآخر مفصولةً بفواصل بعد كائن السياق مباشرةً بالصيغة fn.call(contextObj, arg1, arg2).
function buildLine(currency, discount) {
const finalPrice = this.price - discount;
return this.item + ': ' + finalPrice + ' ' + currency;
}
const product = { item: 'Keyboard', price: 250 };
document.getElementById('args-out').textContent = buildLine.call(product, 'SAR', 30);
تتيح تقنية استعارة الأساليب (Method Borrowing) لكائن أن يستفيد مؤقتاً من دالة معرفة مسبقاً داخل كائن آخر عبر الصيغة ownerObj.method.call(guestObj) دون تكرار كتابة الكود.
يختلف تعامل .call() مع تمرير null أو undefined أو القيم الأولية بحسب تفعيل الوضع الصارم "use strict";:
- في الوضع غير الصارم القديم: تُستبدل
nullوundefinedخفيةً بكائن النافذة العامwindow، وتُغلّف الأرقام والنصوص داخل كائنات مغلفة مؤقتة. - في الوضع الصارم الحديث: تبقى
thisمساويةً للقيمة الممررة حرفياً دون تحوير ولا تغليف، مما يحمي النطاق العام من التعديل بالخطأ.
ملخص الدرس
حصاد الدرسمراجعة مركّزة لأهم المفاهيم والقواعد الهندسية التي أتقنتها في هذا الدرس قبل التطبيق العملي
ماذا تعلّمت في هذا الدرس؟
أتقنت في هذا الدرس مفهوم سياق التنفيذ this، والتشغيل الفوري بتحديد السياق والوسائط المفردة عبر fn.call(obj, a, b)، واستعارة الدوال بين الكائنات، وحماية الوضع الصارم من السقوط نحو الكائن العام. الخطوة التالية: انتقل إلى درس «استدعاء الدوال والرفع في JavaScript» لمقارنة أنماط الاستدعاء الأربعة والدوال ذاتية التشغيل والعودية.
سجّل الدخول لحفظ تقدمك
تابع إنجاز المواضيع والمصطلحات والمهام، وكمّل من آخر خطوة على أي جهاز.
المصطلحات3
راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.
- 01 Execution Context (this) سياق التنفيذ this
- الكائن أو القيمة المستقبِلة المرتبطة بالكلمة المحجوزة this داخل الدالة خلال استدعاء معين.
- للمراجعة
- 02 Function.call() الأسلوب المدمج call
- دالة مدمجة تشغل الدالة فوراً مع ربط this بالكائن المحدد في الوسيط الأول وتمرير بقية الوسائط مفصولة بفواصل.
- للمراجعة
- 03 Method Borrowing استعارة الدوال بين الكائنات
- تشغيل أسلوب معرف في كائن واحد على بيانات كائن آخر متوافق البنية باستخدام دالة call.
- للمراجعة
لا توجد بطاقات تطابق البحث والتصفية.
اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.
الاختصارات2
راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.
- 01 JS JS
- JavaScript
- لغة البرمجة الديناميكية التي تعامل الدوال ككائنات مزودة بأساليب تحكم بالسياق مثل call.
- للمراجعة
- 02 ES5 ES5
- ECMAScript 5th Edition
- الإصدار القياسي الذي قدم الوضع الصارم لمنع تحول null في دالة call إلى الكائن العام window.
- للمراجعة
لا توجد بطاقات تطابق البحث والتصفية.
اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.
مهامك قبل الاختبار
خطوة صغيرة كل مرة. وإنجاز تقدر ترجع له.
-
افتح مثال readBadge في محرر التجربة وبدّل الوسيط من hubB إلى hubA لملاحظة تغير نتيجة this فوراً.
-
افتح التبويب الثالث في المحاكي التفاعلي للتحقق من بقاء قيمة this مساوية لـ null في الوضع الصارم.
تأشير المهمة إقرار منك بإتمامها، وليس تصحيحًا آليًا للكود. يُحفظ تقدمك في حسابك.
اختبر فهمك.
ووصلها للإتقان.
كل سؤال خطوة لقدّام. اختار، اكتب كود، وشوف نتيجتك فورًا.
أكمل المهام، واجمع كل الإجابات الصحيحة. أقل من 100%؟ راجع وأعد المحاولة.
الأسئلة متاحة للاطلاع. سجّل الدخول للتفاعل وحفظ تقدمك.