في هذا الدرس 5تصفّح المواضيع
بينما تتألق دالة .call() عندما تكون الوسائط معدودة ومعلومة مسبقاً لحظة كتابة الكود، تجمع البرامج الواقعية غالباً بياناتها الديناميكية داخل مصفوفة Array — كقراءات الحساسات أو أسعار المنتجات — ثم تحتاج لتمرير عناصرها إلى دالة تنتظر معاملات منفصلة، وهنا يأتي الدور الدقيق للدالة fn.apply().
تستقبل الصياغة القياسية fn.apply(thisArg, argsArray) وسيطين اثنين كحد أقصى: الأول هو الكائن المراد ربطه بالكلمة this، والثاني مصفوفة (أو كائن شبيه بالمصفوفة مثل arguments) يفرغ المحرك عناصرها بالترتيب على معاملات الدالة.
function renderTrip(origin, dest, km) {
return this.driver + ': ' + origin + ' -> ' + dest + ' (' + km + ' km)';
}
const captain = { driver: 'Tariq' };
const routeData = ['Riyadh', 'Dammam', 395];
document.getElementById('apply-out').textContent = renderTrip.apply(captain, routeData);
تتطابق الدالتان .call() و.apply() تماماً في التنفيذ الفوري وتعيين this، وينحصر الفرق الوحيد بينهما في طريقة تغليف الوسائط الممررة؛ وتساعدك القاعدة الذهبية (Apply = Array) و(Call = Commas) على عدم الخلط بينهما أبداً:
| الدالة | الصياغة القياسية | الحالة الأنسب للاستخدام |
|---|---|---|
fn.call() | fn.call(ctx, a, b, c) | وسائط ثابتة ومعلومة العدد تُكتب مباشرةً بالفواصل |
fn.apply() | fn.apply(ctx, [a, b, c]) | قيم متغيرة العدد مجمعة مسبقاً داخل مصفوفة |
تتوقع الدالتان المدمجتان Math.max() وMath.min() أرقاماً منفصلة؛ فإذا مررت لهما مصفوفة مباشرةً ستكون النتيجة NaN! وبما أن دوال Math لا تحتاج إلى this، نمرر null في السياق عبر Math.max.apply(null, scores) لاستخراج أكبر وأصغر قيمة بنظافة.
const scores = [78, 94, 85, 62, 91];
const highest = Math.max.apply(null, scores);
const lowest = Math.min.apply(null, scores);
document.getElementById('max-out').textContent = 'Max: ' + highest + ' | Min: ' + lowest;
إن استدعاء listA.push(listB) مباشرةً يدرج المصفوفة الثانية كعنصر فرعي متداخل؛ أما استدعاء listA.push.apply(listA, listB) فيربط السياق بالمصفوفة الأولى ويفكك عناصر الثانية لتُلحق فرادى في نهايتها مباشرةً.
ملخص الدرس
حصاد الدرسمراجعة مركّزة لأهم المفاهيم والقواعد الهندسية التي أتقنتها في هذا الدرس قبل التطبيق العملي
ماذا تعلّمت في هذا الدرس؟
أتقنت في هذا الدرس صياغة fn.apply(thisArg, argsArray)، وقارنت عملياً بين .call() للفواصل و.apply() للمصفوفات، وحسبت القيم القصوى عبر Math.max.apply()، ودمجت عناصر المصفوفات موضعياً عبر push.apply(). الخطوة التالية: انتقل إلى درس «دالة bind وربط السياق في JavaScript» لإنشاء دوال مثبتة السياق والوسائط المسبقة.
سجّل الدخول لحفظ تقدمك
تابع إنجاز المواضيع والمصطلحات والمهام، وكمّل من آخر خطوة على أي جهاز.
المصطلحات3
راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.
- 01 Function.apply() الأسلوب المدمج apply
- دالة مدمجة تشغل الدالة فوراً بتحديد سياق this وتمرير كافة وسائطها مجمعة داخل مصفوفة واحدة.
- للمراجعة
- 02 Argument Unpacking تفكيك عناصر المصفوفة للمعاملات
- توزيع عناصر المصفوفة وفق ترتيب فهارسها بحيث يذهب كل عنصر إلى المعامل المقابل له في الدالة.
- للمراجعة
- 03 In-Place Array Merge الدمج الموضعي للمصفوفة
- إلحاق عناصر مصفوفة ثانية مباشرة داخل المصفوفة الأصلية دون إنشاء مصفوفة ثالثة جديدة.
- للمراجعة
لا توجد بطاقات تطابق البحث والتصفية.
اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.
الاختصارات2
راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.
- 01 NaN NaN
- Not-a-Number
- القيمة الناتجة عند تمرير كائن المصفوفة كاملاً إلى Math.max دون تفكيك عناصره عبر apply.
- للمراجعة
- 02 KM KM
- Kilometers Distance Unit
- وحدة قياس المسافة بالكيلومتر المستخدمة في مثال تفكيك بيانات الرحلة من المصفوفة.
- للمراجعة
لا توجد بطاقات تطابق البحث والتصفية.
اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.
مهامك قبل الاختبار
خطوة صغيرة كل مرة. وإنجاز تقدر ترجع له.
-
تنقل بين التبويبين الثاني والثالث في المحاكي لمقارنة تمرير null في Math.max وتمرير المصفوفة نفسها في push.
-
افتح مثال scores في محرر التجربة وأضف الرقم 99 داخل المصفوفة للتحقق من تحديث القيمة العظمى.
تأشير المهمة إقرار منك بإتمامها، وليس تصحيحًا آليًا للكود. يُحفظ تقدمك في حسابك.
اختبر فهمك.
ووصلها للإتقان.
كل سؤال خطوة لقدّام. اختار، اكتب كود، وشوف نتيجتك فورًا.
أكمل المهام، واجمع كل الإجابات الصحيحة. أقل من 100%؟ راجع وأعد المحاولة.
الأسئلة متاحة للاطلاع. سجّل الدخول للتفاعل وحفظ تقدمك.