بعض اللغات - مثل Ruby و CoffeScript وإصدار JavaScript القادم - يمكن أن تعلن المعلمات الافتراضية عند تحديد وظيفة ، مثل هذه:
نسخة الكود كما يلي:
دالة myfunc (param1 ، param2 = "السلسلة الثانية") {
console.log (param1 ، param2) ؛
}
// المخرجات: "السلسلة الأولى" و "السلسلة الثانية"
myfunc ("السلسلة الأولى") ؛
// مخرجات: "السلسلة الأولى" و "الإصدار الثاني من السلسلة 2"
myfunc ("سلسلة الأولى" ، "Second String الإصدار 2") ؛
لسوء الحظ ، في إصدار JavaScript الحالي ، هذه الكتابة غير صالحة. إذن ما الذي يمكننا فعله لتنفيذ بهذه الطريقة ، باستخدام مجموعة أدواتنا الحالية؟
أسهل حل هو مثل هذا:
نسخة الكود كما يلي:
وظيفة myfunc (param1 ، param2) {
if (param2 === undefined) {
param2 = "السلسلة الثانية" ؛
}
console.log (param1 ، param2) ؛
}
// مخرجات: "السلسلة الأولى" و "الإصدار الثاني من السلسلة 2"
myfunc ("سلسلة الأولى" ، "Second String الإصدار 2") ؛
والحقيقة هي أن المعلمة المحذوفة تكون دائمًا "غير محددة" عند الوصول إليها. إذا كان لديك معلمة واحدة فقط ، فهذا حل جيد ، ماذا لو كان هناك عدة معايير في ذلك الوقت؟
إذا كان لديك أكثر من معلمة واحدة ، فيمكنك استخدام كائن كمعلمة ، والتي تتمتع بميزة أن كل معلمة لها تسمية واضحة. إذا قمت بتمرير معلمة كائن ، فيمكنك إعلان القيمة الافتراضية بنفس الطريقة.
نسخة الكود كما يلي:
وظيفة myfunc (paramObject) {
var defaultparams = {
Param1: "السلسلة الأولى" ،
Param2: "السلسلة الثانية" ،
param3: "السلسلة الثالثة"
} ؛
var finalparams = defaultParams ؛
// نكرر على كل خاصية من paramObject
ل (مفتاح var في paramObject) {
// إذا لم يتم الوراثة الخاصية الحالية ، فسيتم متابعة
if (paramobject.hasownproperty (مفتاح)) {
// إذا تم تعريف الخاصية الحالية ،
// أضفه إلى FinalParams
if (paramObject [key]! == undefined) {
FinalParams [key] = paramObject [key] ؛
}
}
}
console.log (Finalparams.param1 ،
Finalparams.param2 ،
Finalparams.Param3) ؛
}
myfunc ({param1: "سلسلة بلدي"}) ؛
هذا خرقاء بعض الشيء. إذا كنت تستخدم هذه الطريقة كثيرًا ، فيمكنك كتابة وظيفة تغليف. لحسن الحظ ، فإن العديد من المكتبات لديها الآن أساليب ذات صلة ، مثل طريقة التمديد في jQuery و Inderscore.
ما يلي يستخدم طريقة تمديد السفلية لتحقيق نفس النتيجة أعلاه:
نسخة الكود كما يلي:
وظيفة myfunc (paramObject) {
var defaultparams = {
Param1: "السلسلة الأولى" ،
Param2: "السلسلة الثانية" ،
param3: "السلسلة الثالثة"
} ؛
var finalParams = _.Extend (DefaultParams ، paramObject) ؛
console.log (Finalparams.param1 ،
Finalparams.param2 ،
Finalparams.Param3) ؛
}
// المخرجات:
// "سلسلة بلدي" و "السلسلة الثانية" و "السلسلة الثالثة"
myfunc ({param1: "سلسلة بلدي"}) ؛
هذه هي الطريقة التي يمكنك بها الحصول على المعلمات الافتراضية في إصدار JavaScript الحالي.
نقد وتصحيح الجوانب غير المناسبة في المقالة.