اذهب إلى المحتوى

السؤال

Recommended Posts

  • 0
نشر

الاختلاف هو أن apply يتيح لك استدعاء الدالة باستخدام arguments كمصفوفة ؛ في حين تتطلب call سرد المعلمات بشكل صريح. 

هناك أيضًا ، اعتبارًا من ES6 ، إمكانية نشر المصفوفة لاستخدامها مع وظيفة الاستدعاء ، يمكنك رؤية التوافق هنا.

1 - apply

عادةً ، عند استدعاء دالة ، تكون قيمة هذا داخل الوظيفة هي الكائن الذي تم الوصول إلى الدالة عليه. باستخدام apply () ، يمكنك تعيين قيمة عشوائية على هذا النحو عند استدعاء دالة موجودة ، دون إرفاق الوظيفة أولاً بالعنصر كخاصية. يتيح لك هذا استخدام طرق كائن واحد كوظائف عامة. 

يمكنك أيضًا استخدام أي نوع من الكائنات يشبه المصفوفة كمعامل ثانٍ. في الممارسة العملية ، هذا يعني أنه يجب أن يكون لها خاصية طول ، وخصائص عدد صحيح ("index") في النطاق (0 .. الطول - 1).  على سبيل المثال:

function wrapper() {
  return anotherFn.apply(null, arguments);
}

 

2- call

عادةً ، عند استدعاء دالة ، تكون قيمة هذا داخل الوظيفة هي الكائن الذي تم الوصول إلى الوظيفة عليه. باستخدام call () ، يمكنك تعيين قيمة عشوائية على هذا النحو عند استدعاء دالة موجودة ، دون إرفاق الوظيفة أولاً بالعنصر كخاصية. يتيح لك هذا استخدام طرق كائن واحد كوظائف عامة.

function greet() {
  console.log(this.animal, "typically sleep between", this.sleepDuration);
}

const obj = {
  animal: "cats",
  sleepDuration: "12 and 16 hours",
};

greet.call(obj); // cats

call () يكافئ تقريبًا استدعاء دالة عادي ، باستثناء أنه يتم تمريره كمعامل عادي بدلاً من القيمة التي تم الوصول إلى الوظيفة من خلالها. هذا مشابه لكيفية عمل وظائف الأداة المساعدة للأغراض العامة: بدلاً من استدعاء array.map (رد نداء) ، يمكنك استخدام map (مصفوفة ، رد نداء) ، والذي يتجنب تغيير Array.prototype ، ويسمح لك باستخدام الخريطة مع كائنات تشبه المصفوفة ليست مصفوفات (على سبيل المثال ، وسيطات).

const slice = Array.prototype.slice;

// ...

slice.call(arguments);

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...