Youssef Nasr2 نشر 30 نوفمبر 2022 أرسل تقرير نشر 30 نوفمبر 2022 السلام عليكم ما هو الفرق بين apply وcall؟ اقتباس
0 Ahmed Sadek Elamine Touahria نشر 30 نوفمبر 2022 أرسل تقرير نشر 30 نوفمبر 2022 الاختلاف هو أن 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); اقتباس
السؤال
Youssef Nasr2
السلام عليكم
ما هو الفرق بين apply وcall؟
1 جواب على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.