كيفية تنفيذ الأسلوب الزائد في JS؟ هذا ينطوي على ثلاث قضايا
1. مشكلة استدعاء وظائف تحمل نفس الاسم
2. معلمات خاصة في الوظيفة
3. كيفية استخدام الوسائط لتنفيذ التحميل الزائد للأسلوب
1. مشكلة استدعاء وظائف تحمل نفس الاسم
يعلم الجميع أنه إذا كانت هناك وظائف متعددة تحمل نفس الاسم في JS ، فسيتم استخدام آخر مرة في كل مرة عند الاتصال. JS هو في الواقع ليس مثقلة. وهذا يعني ، إذا تم تعريف وظائف متعددة ذات نفس الاسم ، فإن المعلمة الفردية مختلفة. عند الاتصال ، لا يهتم JS بعدد المعلمات ، ولكن فقط الطلب قبل وبعد
على سبيل المثال:
وظيفة test1 (arg1) {Alert ("المعلمة 1:"+arg1) ؛ } وظيفة test1 (Arg1 ، Arg2 ، Arg3) {Alert ("المعلمة 1:"+arg1+"المعلمة 2:"+arg2+"المعلمة 3:"+arg3) ؛ } // اختبار وظيفة رمز الاختبار () {test1 ("1")}على الرغم من أننا نسمي Test1 ("1") ، وتمرير معلمة ، فإن المكالمة الفعلية هي Test1 (Arg1 ، Arg2 ، Arg3) ، ولا ندعو طريقة بمعلمة واحدة فقط لأننا نمرر المعلمة.
2. معلمات خاصة في الوظيفة
إذا استخدمنا الرمز التالي
وظيفة test1 (Arg1 ، Arg2 ، Arg3) {Alert ("المعلمة 1:"+arg1+"المعلمة 2:"+arg2+"المعلمة 3:"+arg3) ؛ } وظيفة test1 (arg1) {Alert ("المعلمة 1:"+arg1) ؛ } // اختبار وظيفة رمز الاختبار () {test1 ("1" ، "2")}نحن نعلم أن المكالمة هي دائمًا Test1 (Arg1) ، مما يعني وظيفة مع معلمة واحدة فقط ، ولكن كيفية تمرير المعلمات الأخرى؟
هذا يتطلب استخدام معلمات خاصة في وسيطات الوظائف ، والتي تحتوي على جميع المعلمات التي تم تمريرها إلى الوظيفة
وظيفة test1 () {var text = "" ؛ لـ (var i = 0 ؛ i <enduments.length ؛ i ++) {text+= "parameters"+i+": } تنبيه (نص) ؛ } // اختبار وظيفة رمز test () {test1 ("1") ؛ Test1 ("1" ، "2") ؛ Test1 ("1" ، "2" ، "3") ؛ }بعد الاختبار ، وجد أن الوسائط تحتوي على جميع المعلمات التي تم تمريرها إلى الوظيفة ، والوسائط. يختلف الطول وفقًا لعدد المعلمات الفعلية التي تم تمريرها ، والوسائط. يمثل الطول عدد تم تمريره فعليًا إلى معلمات الوظيفة.
3. كيفية تنفيذ التحميل الزائد للوظائف في JS؟
بعد الاختبارات أعلاه ، وجد أنه لا يمكن تنفيذ الحمل الزائد للوظائف مباشرة في JS ، ولكن هل هناك طريقة لتحقيق تأثيرات مماثلة؟
نعم ، استخدم الحجج بشكل أساسي
على سبيل المثال:
وظيفة test1 () {var text = "" ؛ if (mancepitions.length == 1) {// استدعاء طريقة لمعلمة واحدة} آخر if (manceuments.length == 2) {// استدعاء طريقة لمعلمتين} آخر {// طرق أخرى}}