ذكرت مقالة سابقة طرق مختلفة لاستدعاء وظائف مجهولة. تلقي هذه المقالة نظرة على الطرق المختلفة للاتصال بالوظائف المسماة.
1. ()
الوظيفة الأكثر استخدامًا هي استدعاء/تنفيذ وظيفة:
نسخة الكود كما يلي:
// لا دالة المعلمة fun1
وظيفة fun1 () {
في حالة تأهب ("أنا مسمى") ؛
}
fun1 () ؛
// parameter function2 fun2
Function Fun2 (param) {
تنبيه (بارام) ؛
}
Fun2 ("أنا مسمى") ؛
بعد eCmascript3 ، اتصل وتطبيق الوظيفة ، هناك نوعان من الوظائف.
2. اتصل
نسخة الكود كما يلي:
// لا دالة المعلمة fun1
وظيفة fun1 () {
في حالة تأهب ("أنا مسمى") ؛
}
fun1.call (null) ؛
// parameter function2 fun2
Function Fun2 (param) {
تنبيه (بارام) ؛
}
fun2.call (NULL ، "أنا مسمى")
3
نسخة الكود كما يلي:
// لا دالة المعلمة fun1
وظيفة fun1 () {
في حالة تأهب ("أنا مسمى") ؛
}
fun1.apply (null) ؛
// parameter function2 fun2
Function Fun2 (param) {
تنبيه (بارام) ؛
}
fun2.apply (NULL ، ['أنا مدعو "])
على الرغم من أن المكالمة ، يمكن استخدام التطبيق بحتة للاتصال/تنفيذ الوظائف ، إلا أنها تستخدم أكثر لتغيير سياق تنفيذ الوظيفة.
4. جديد (لا ينصح هذه الطريقة)
نسخة الكود كما يلي:
// لا دالة المعلمة fun1
وظيفة fun1 () {
في حالة تأهب ("أنا مسمى") ؛
}
New Fun1 () ؛
// parameter function2 fun2
Function Fun2 (param) {
تنبيه (بارام) ؛
}
Fun2 جديد ("أنا مسمى")
جوهر الجديد هو إنشاء/بناء مثيل للفصل. من الواضح أن Fun1 و Fun2 المحددة هنا ليست فئة (لا هذا ، لا يوجد نموذج أولي). لكن كلتا الوظيفتين لم تنفذ. هذا هو الآثار الجانبية الجديدة.
من طريقة الاتصال أعلاه ، لا يوجد فرق في نتائج تنفيذ الطرق الأربعة. ولكن إذا كانت الوظيفة لها قيمة إرجاع ، فقد تخيب ظنك عند تسميتها بالطريقة الجديدة.
نسخة الكود كما يلي:
// وظيفة متعة مع قيمة الإرجاع
وظيفة المرح () {
في حالة تأهب ("أنا مسمى") ؛
إرجاع "جاك" ؛
}
var c = new fun () ؛
تنبيه (ج) ؛ // [كائن كائن] ، لماذا لا "جاك"؟
تغييره إلى هذا
نسخة الكود كما يلي:
// وظيفة متعة مع قيمة الإرجاع
وظيفة المرح () {
في حالة تأهب ("أنا مسمى") ؛
return {name: 'Jack'} ؛
}
var c = new fun () ؛
تنبيه (c.name) ؛ // جاك ، عاد بشكل طبيعي
لتلخيص: عند استدعاء وظيفة بطريقة جديدة. إذا كانت هناك قيمة إرجاع ، فلن يتم إرجاع القيمة عندما تكون قيمة الإرجاع نوعًا مدمجًا (نوع أساسي) من JavaScript مثل السلسلة (السلسلة) ، الرقم (الرقم) ، المنطقي ، إلخ. عندما تكون قيمة الإرجاع نوعًا كائنًا ، سيتم إرجاع الكائن والوظيفة والمصفوفة مباشرة.
عندما تكون قيمة الإرجاع نوعًا مدمجًا (نوع الأساس) ، ما الذي يعوده بالضبط جديد () المرح الجديد؟ ستناقش المقالة التالية تفاصيل مكالمات الطريقة الجديدة.