شی arguments ECMAScript

اشیا arguments

در کد تابع، از اشیای خاص 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" دارد.

با اینکه به خوبی reload نیست، اما کافی است تا از این محدودیت‌های ECMAScript فرار کنیم.