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

ما هو الفرق بين apply وcall في لغة javascript

Youssef Nasr2

السؤال

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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...