1. ما هي الحجج
الحجج هو كائن مدمج في JavaScript. تستخدم جميع مكتبات وظائف JS الرئيسية كائنات الوسائط. لذلك ، يعد كائن Agruments ضروريًا لمبرمجي JavaScript على دراية به.
جميع الوظائف لها كائن وسيطاتها الخاصة ، والتي تتضمن المعلمات التي سيتم استدعاؤها بواسطة الوظيفة. إنها ليست صفيفًا ، إذا تم استخدام وسيطات typeof ، فإن الإرجاع هي "كائن". على الرغم من أنه يمكننا استدعاء الحجج عن طريق الاتصال بالبيانات. على سبيل المثال ، الطول ، وأسلوب الفهرس. لكن كائنات الدفع والبوب من المصفوفات لا تنطبق.
2. إنشاء وظيفة مرنة
يبدو أن كائن الوسيطة يقتصر جدًا على الاستخدام ، لكنه في الواقع كائن مفيد للغاية. يمكنك استخدام كائن الوسيطة لتمكين الوظيفة من استدعاء عدد غير محدد من المعلمات. هناك وظيفة منسقة في مكتبة Dean Edwards 'Base2 التي توضح هذه المرونة.
انسخ الرمز كما يلي: تنسيق الوظيفة (سلسلة) {
var args = الوسيطات ؛
VAR pattern = new regexp ("٪ ([1-" + enduments.length + "])" ، "G") ؛
سلسلة الإرجاع (سلسلة) .replace (نمط ، وظيفة (مطابقة ، فهرس) {
إرجاع args [الفهرس] ؛
}) ؛
} ؛
نحن نقدم سلسلة قالب حيث يمكنك إضافة عنصر نائب إلى قيمة الإرجاع باستخدام "٪ 1" إلى "٪ 9". ثم توفير تسعة معلمات أخرى لإدراج.
نسخة الكود كما يلي: Format ("و ٪ 1 تريد أن تعرف من ٪ 2 you ٪ 3 ″ ،" الأوراق "،" القميص "،" ارتداء ") ؛
سيعود الرمز أعلاه: وتريد الأوراق معرفة قميصه الذي ترتديه ".
هناك شيء نحتاج إلى الانتباه إليه. يسمح لنا JavaScript بتمرير أي عدد من المعلمات إلى وظيفة ، بغض النظر عن كيفية تحديد هذه الوظيفة. الكائنات الحجج مسموح بها لهذه.
3. تحويل الحجج الكائن إلى مجموعة حقيقية
على الرغم من أن كائن الوسائط ليس صفيف JavaScript حقيقي ، إلا أنه يمكننا تحويله بسهولة إلى بيانات قياسية ثم إجراء عمليات صفيف.
نسخة الكود كما يلي: var args = array.prototype.slice.call (وسيطات) ؛
الآن يحتوي ARGS المتغير على كائن صفيف JavaScript قياسي يحتوي على جميع معلمات الوظيفة.
4. إنشاء وظائف من خلال كائنات الوسائط المسبقة
يتيح لنا كائن الوسائط تنفيذ جميع أنواع أساليب JavaScript. هنا تعريف وظيفة Makefunc. تتيح لنا هذه الوظيفة توفير مرجع دالة وجميع معلمات هذه الوظيفة. سيعود وظيفة مجهولة للاتصال بالوظيفة التي حددتها ، وكذلك توفير المعلمات المرفقة بعنوان استدعاء الوظيفة المجهولة.
انسخ الرمز على النحو التالي: وظيفة makefunc () {
var args = array.prototype.slice.call (وسيطات) ؛
var func = args.shift () ؛
وظيفة الإرجاع () {
return func.apply (null ، args.concat (array.prototype.slice.call (الحجج))) ؛
} ؛
}
يوفر كائن الوسيطة الأول Makefunc مرجعًا إلى الوظيفة التي تريد الاتصال بها. أزالها من صفيف الحجج. ثم يقوم Makefunc بإرجاع وظيفة مجهولة لتشغيل الطريقة المحددة.
تشير وسيطة التطبيق الأول إلى نطاق استدعاء الوظيفة ، ويشار إليه بشكل رئيسي من قبل الأجزاء الرئيسية للوظيفة. دعونا نحافظ على هذا الفارغ أولاً. الوسيطة الثانية هي صفيف سيتم تحويله إلى كائن وسيطة لهذه الوظيفة. Makefunc يسلط قيم المصفوفة الأصلية في كائن الوسائط ومصفوفة الوظائف المدعومة.
تحتاج إلى إخراج قالب هو دائمًا نفس الموضع بحيث لا تتصل دائمًا بوظيفة التنسيق في كل مرة تشير فيها إلى القالب. يمكنك استخدام الوظيفة العامة لـ Makefunc لإرجاع الوظائف التي يمكنها استدعاء تنسيق واستكمال القالب تلقائيًا.
نسخة التعليمات البرمجية كما يلي: var majortom = makefunc (تنسيق ، "هذا هو توم الكبرى للسيطرة على الأرض. أنا ٪ 1.") ؛
يمكنك استدعاء وظيفة majortom مثل هذا:
نسخة الكود كما يلي: majortom ("التنقل عبر الباب") ؛
majortom ("العائمة بطريقة غريبة") ؛
في كل مرة تتصل فيها majortom ، سوف تسمي وظيفة التنسيق والوسيطة الأولى في نفس الوقت ، والقالب المكتوب بالفعل. ثم سيعود
انسخ الرمز على النحو التالي: "هذا هو توم الكبرى للسيطرة على الأرض. أنا أتخطى الباب."
"هذا هو توم الرائد للسيطرة على الأرض.
5. قم بإنشاء وظيفة تشير إلى نفسها
قد تعتقد أن هذا رائع ، ولكن هناك المزيد من المفاجآت للحجج. لديه ميزات أخرى مفيدة: طريقة كالي. MANDICES.CALLEE يتضمن إشارة إلى دالة لإنشاء كائن وسيطة. إذن كيف تستخدمه؟
تتيح طريقة الوسيطات.
التكرار هي وظيفة تحمل مرجع الوظيفة ورقمتين. الرقم الأول هو عدد المرات التي يتم فيها استدعاء الوظيفة ، والرقم الثاني هو الفاصل الزمني بين كل مكالمة ، بالمللي ثانية.
نسخة الكود كما يلي: تكرار الوظيفة (FN ، الأوقات ، التأخير) {
وظيفة الإرجاع () {
if (times> 0) {
fn.apply (NULL ، الحجج) ؛
var args = array.prototype.slice.call (وسيطات) ؛
var self = arguments.callee ؛
setTimeOut (function () {self.apply (null ، args)} ، delay) ؛
}
} ؛
}
تستخدم وظيفة التكرار وسيطات. وبهذه الطريقة ، يمكن استدعاء الوظيفة المجهولة مرة أخرى.
لدي وظيفة موجزة للغاية تستضيف سلسلة وتنفيذ طريقة تنبيه.
انسخ الرمز كما يلي: وظيفة comms (s) {
التنبيه (s) ؛
}
ومع ذلك ، أريد إنشاء نسخة خاصة يمكنني من خلالها تكرار هذا الإجراء ثلاث مرات ، في كل فترة زمنية من ثانيتين. ثم نستطيع
نسخة التعليمات البرمجية كما يلي: var sometherwrong = Reper (comms ، 3 ، 2000) ؛
شيء ما في الأمر ("هل تسمعني ، الرائد توم؟") ؛
تتمثل نتيجة استدعاء وظيفة SomethingWrong في تكرار هذا الإجراء ثلاث مرات ، مع كل فاصل تنبيه قدره 2 ثانية.
على الرغم من عدم استخدام الحجج بشكل متكرر وهي غريبة بعض الشيء ، إلا أنها مليئة بالمفاجآت وتستحق التعلم منها.