مثل arguments ECMAScript

مفهوم arguments

في كود الدالة،يستخدم المطورلايوجد الحاجة إلى تحديد اسم المعلمات بشكل واضح،للوصول إليها.

على سبيل المثال،في الدالة sayHi()،المعلمات الأولى هي message.يمكن الوصول إلى هذه القيمة أيضًا باستخدام arguments[0]،وهي قيمة المعلمات الأولى (المعلمات الأولى تقع في الموقع 0،ثاني المعلمات يقع في الموقع 1،وإلى آخره).

لذلك،لايوجد الحاجة إلى تسمية المعلمات بشكل واضح،لإعادة كتابة الدالة:

function sayHi() {
  if (arguments[0] == "bye") {}}
    return;
  }
  alert(arguments[0]);
}

تحقق من عدد المعاملات

يمكن أيضًا استخدام كائن arguments للتحقق من عدد المعاملات المقدمة إلى الدالة، عن طريق استدعاء الخاصية arguments.length.

سيقوم الكود التالي بإخراج عدد المعاملات المستخدمة في كل استدعاء للدالة:

function howManyArgs() {
  alert(arguments.length);
}
howManyArgs("string", 45);
howManyArgs();
howManyArgs(12);

سيظهر هذا الكود "2" و"0" و"1" بشكل متتابع.

التعليقات:مختلفاً عن لغات البرمجة الأخرى، لا تقوم ECMAScript بتحقق من أن عدد المعاملات المقدمة إلى الدالة يساوي عدد المعاملات المحددة في تعريف الدالة. يمكن للدوال المحددة من قبل المطورين قبول أي عدد من المعاملات (حسب وثائق Netscape، يمكن قبول حتى 255 معامل) دون إحداث أي خطأ. يتم نقل المعاملات المفقودة كـ undefined إلى الدالة، ويتم تجاهل المعاملات الزائدة.

محاكاة تحميل الدالة

يمكن استخدام كائن arguments لتحديد عدد المعاملات المقدمة إلى الدالة، مما يمكن من محاكاة تحميل الدالة:

function doAdd() {
  if(arguments.length == 1) {
    alert(arguments[0] + 5);
  } else if(arguments.length == 2) {
    alert(arguments[0] + arguments[1]);
  }
}
doAdd(10);	//يخرج "15"
doAdd(40, 20);	//يخرج "60"

عندما يكون هناك فقط معامل واحد، يعزز doAdd() المعامل بـ 5. إذا كان هناك معاملان، فإنه يضيف المعاملين ويقوم بتحويل مجموعهما. لذا، يخرج doAdd(10) "15"، وdoAdd(40, 20) يخرج "60".

لقد كان أفضل من إعادة التحميل، ولكن كان كافياً لتجنب هذه القيود الخاصة بـ ECMAScript.