اختر لونك:
وَقُلِ اعْمَلُوا فَسَيَرَى اللَّهُ عَمَلَكُمْ وَرَسُولُهُ وَالْمُؤْمِنُونَ ۖ وَسَتُرَدُّونَ إِلَىٰ عَالِمِ الْغَيْبِ وَالشَّهَادَةِ فَيُنَبِّئُكُم بِمَا كُنتُمْ تَعْمَلُونَ [ التوبة : ( 105 )] كلمة الإدارة

يرجى إختيار القسم المناسب قبل النشر وسيعاقب المخالف بإنذار أول مرة وسيتم حظره إذا تكرر ذلك كلمة الإدارة

يُمنع كتابة مواضيع السحر والشعوذة والروحانيات والابراج بكافة الأشكال والمخالف سيعاقب بحظر مؤقت وإذا تكرر سيكون حظر دائم تنبيه هام جداً



أضف رد جديد
 
LinkBack أدوات الموضوع انواع عرض الموضوع

قديم 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 الجافاسكريبت
كل هذه التقنيات تمكننا من عمل function overloading بتحكم عالي في الجافاسكريبت وبالتالي إعطاء قوة أكبر ومرونة أكثر لتطبيقاتنا.

raheel غير متواجد حالياً   اقتباس
أضف رد جديد


الذين يشاهدون محتوى الموضوع الآن : 1 ( الأعضاء 0 والزوار 1)
 

تعليمات المشاركة
لا تستطيع إضافة مواضيع جديدة
لا تستطيع الرد على المواضيع
لا تستطيع إرفاق ملفات
لا تستطيع تعديل مشاركاتك

BB code is متاحة
كود [IMG] متاحة
كود HTML معطلة
Trackbacks are متاحة
Pingbacks are متاحة
Refbacks are متاحة


المواضيع المتشابهه
الموضوع كاتب الموضوع المنتدى مشاركات آخر مشاركة
منهج التضمين في التفسير القيصر قسم القرآن الكريم 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


الساعة الآن 11:40 AM

 


Content Relevant URLs by vBSEO ©2010, Crawlability, Inc.