كلمة الإدارة |
كلمة الإدارة |
تنبيه هام جداً |
أضف رد جديد |
07-04-2019, 06:10 PM | #1 |
تاريخ التسجيل: Feb 2019
العمر: 38
المشاركات: 1,149
التقييم: 10
|
تاريخ التسجيل: Feb 2019
العمر: 38
المشاركات: 1,149
التقييم: 10
ما هو معني function overloading في لغة الجافاسكريبت
تشترك معظم لغات البرمجة المعروفة كالجافا و PHP و الجافاسكريبت في مزية ال function overloading أو method overloading، بحث تقوم الدالة بسلوك مختلف في كل مرة نقوم باستدعائها فيها وذلك على حسب عدد ونوع البارامترات التي مررناها لهذه الدالة.
إذن لكي نقوم بعملية overloading لدالة في الجافاسكريبت نحتاج من جهة لتحديد عدد البارامترات ومن جهة ثانية تحديد أنواع هذه البارامترات. تحديد عدد البارامترات في داخل كل دالة في الجافاسكريبت يوجد كائن اسمه arguments وهو شبيه بمصفوفة ولكنه ليس بمصفوفة (Array-like object or Pseudo-array) ويضم جميع البارامترات الممررة للدالة التي يوجد بداخلها، كما أنه يمتلك خاصية تدعى length تمكننا من معرفة عدد هذه البارامترات (تماما مثل length عند المصفوفات Arrays). function sendMessage( msg, obj ) { //التأكد من أن كل من الرسالة msg و الكائن obj قد تم تمريرهما if ( arguments.length == 2 ) //إظهار الرسالة بواسطة دالة handleMsg للكائن obj obj.handleMsg( msg ); // في الحالة الثانية، عند تمرير بارامتر واحد فقط يتم افتراض // أن هذا البارامتر هو الرسالة msg else // إذن فقط أظهر الرسالة msg في alert alert( msg ); } 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 function sendMessage( msg, obj ) { //التأكد من أن كل من الرسالة msg و الكائن obj قد تم تمريرهما if ( arguments.length == 2 ) //إظهار الرسالة بواسطة دالة handleMsg للكائن obj obj.handleMsg( msg ); // في الحالة الثانية، عند تمرير بارامتر واحد فقط يتم افتراض // أن هذا البارامتر هو الرسالة msg else // إذن فقط أظهر الرسالة msg في alert alert( msg ); } إذن نستطيع استدعاء الدالة أعلاه (sendMessage) بطريقتين مختلفتين، الطريقة الأولى تتم بتمرير عامل (parameter) واحد فقط وآنذاك سيتم افتراض أن هذا العامل الوحيد هو الرسالة msg فيتم إظهارها في علبة alert كما هي الأوامر داخل الدالة. // سيتم إظهار الرسالة ("Hello, World!") في علبة alert. sendMessage( "Hello, World!" ); 1 2 // سيتم إظهار الرسالة ("Hello, World!") في علبة alert. sendMessage( "Hello, World!" ); أما الطريقة الثانية فهي بتمرير عاملين للدالة sendMessage الأول هو الرسالة msg والثاني هو الكائن obj الذي يضم بدوره الدالة handleMsg التي تقوم بدورها بإظهار الرسالة msg. sendMessage( "How are you?", { handleMsg: function( msg ) { alert( "This is a custom message: " + msg ); } }); 1 2 3 4 5 6 7 8 9 sendMessage( "How are you?", { handleMsg: function( msg ) { alert( "This is a custom message: " + msg ); } }); والجذير بالمعرفة أنه يمكننا الحصول على قيم البارامترات كلها عن طريق الأوبجكت arguments كذلك بالطريقة التالية كمثال : for ( var i = 0; i < arguments.length; i++ ) { alert(arguments[i]); } 1 2 3 for ( var i = 0; i < arguments.length; i++ ) { alert(arguments[i]); } تحديد أنواع البارامترات يتم تحديد أنواع الكائنات في الجافاسكريبت بطرق مختلفة ولعل أهمها : 1.استعمال typeof استعمال التعبير typeof هو من أكثر الطرق شيوعا في تحديد أنواع الكائنات في الجافاسكريبت، إلا أنه مثلا ليس بالدقة الكافية لكي يخبرنا عن نوع كائن مصفوفة مثلا، هو فقط يخبرنا بأن هذا الكائن هو أوبجكت “object” وليس “string”. var arr = ["one","two","three"], nb = 20; typeof arr; // "object" typeof nb; // "number" 1 2 3 var arr = ["one","two","three"], nb = 20; typeof arr; // "object" typeof nb; // "number" وبالعودة للدالة sendMessage السابقة، سيكون من الأفضل لو تحققنا من أن نوع البارامتر msg هو String قبل أن يتم إظهاره. if(typeof msg == "string") //doSomething() else //doSomethingElse() 1 2 3 4 if(typeof msg == "string") //doSomething() else //doSomethingElse() 2.استعمال الخاصية constructor الطريقة الثانية والأكثر دقة في تحديد أنواع الكائنات هو استخدام الخاصية constructor الموجودة في كل الكائنات، وهي بمثابة مرجع لدالة ال Constructor التي بواسطتها تم بناء هذا الكائن. *للمزيد عن مفهوم ال Constructor يمكنك الرجوع لدرس البرمجة الكائنية في الجافاسكريبت. هذه الطريقة تمكننا من التحقق من مختلف الأنواع الموجودة في لغة الجافاسكريبت وبدقة عالية. أي أنها ستمكننا من التأكد من أن نوع كائن مصفوفة مثلا هو Array وليس مجرد “object” كما يفعل التعبير typeof. var x = []; alert(x.constructor == Array); // true var nb = 20; alert(nb.constructor == Number); // true 1 2 3 4 var x = []; alert(x.constructor == Array); // true var nb = 20; alert(nb.constructor == Number); // true *نلاحظ أن التعبير typeof يقوم بإرجاع نوع الكائن على شكل نص ( “string” مثلا)، بينما الخاصية constructor تقوم بارجاع النوع على شكل أوبجكت (String مثلا). والصورة التالية تبين مختلف الأنواع الموجودة في لغة الجافاسكريبت باستعمال كل طريقة من الطريقتين السابقتين (typeof و constructor). كل هذه التقنيات تمكننا من عمل function overloading بتحكم عالي في الجافاسكريبت وبالتالي إعطاء قوة أكبر ومرونة أكثر لتطبيقاتنا. المصدر: منتديات رحيل لكل العرب - من قسم: قسم تطوير المواقع ومحركات البحث والسيو Seo والووردبريس WordPress |
اقتباس |
أضف رد جديد |
الذين يشاهدون محتوى الموضوع الآن : 1 ( الأعضاء 0 والزوار 1) | |
|
|
المواضيع المتشابهه | ||||
الموضوع | كاتب الموضوع | المنتدى | مشاركات | آخر مشاركة |
منهج التضمين في التفسير | القيصر | قسم القرآن الكريم | 2 | 25-07-2019 03:04 AM |
ما هو معني console.time و console.timeEnd في لغة الجافاسكريبت | raheel | قسم تطوير المواقع ومحركات البحث والسيو Seo والووردبريس WordPress | 0 | 07-04-2019 06:13 PM |
ما هو الفرق بين الوعود والكولباك في الجافاسكريبت ؟ | raheel | قسم تطوير المواقع ومحركات البحث والسيو Seo والووردبريس WordPress | 0 | 07-04-2019 06:07 PM |
ما معني JavaScript Fetch API ؟ | raheel | قسم تطوير المواقع ومحركات البحث والسيو Seo والووردبريس WordPress | 0 | 03-04-2019 11:17 PM |
دليلك الشامل حول النظام البيئي لِ “جافاسكريبت” | raheel | قسم تطوير المواقع ومحركات البحث والسيو Seo والووردبريس WordPress | 0 | 01-04-2019 06:50 PM |