Argumentobjekt
Im Funktionscode können Entwickler mithilfe der speziellen Objektargumente auf Parameternamen zugreifen, ohne diese explizit zu benennen.
Zum Beispiel ist in der Funktion sayHi() der erste Parameter message. Auf diesen Wert kann auch mit arguments[0] zugegriffen werden, wobei es sich um den Wert des ersten Arguments handelt (das erste Argument befindet sich an Position 0, das zweite Argument befindet sich an Position 1 usw.).
Somit kann die Funktion umgeschrieben werden, ohne die Parameter explizit zu benennen:
function sayHi() { if (arguments[0] == "bye") { return; } alert(arguments[0]); }
Anzahl der Erkennungsparameter
Sie können das Arguments-Objekt auch verwenden, um die Anzahl der Parameter der Funktion zu ermitteln. Verweisen Sie einfach auf die Eigenschaft arguments.length.
Der folgende Code gibt die Anzahl der in jedem Funktionsaufruf verwendeten Parameter aus:
function howManyArgs() { alert(arguments.length); } howManyArgs("string", 45); howManyArgs(); howManyArgs(12);
Der obige Code zeigt nacheinander „2“, „0“ und „1“ an.
Hinweis: Im Gegensatz zu anderen Programmiersprachen überprüft ECMAScript nicht, ob die Anzahl der an eine Funktion übergebenen Parameter gleich der Anzahl der von der Funktion definierten Parameter ist. Vom Entwickler definierte Funktionen können eine beliebige Anzahl von Argumenten akzeptieren (laut Netscape-Dokumentation bis zu 255), ohne Fehler auszulösen. Alle fehlenden Argumente werden als undefiniert an die Funktion übergeben und zusätzliche Funktionen werden ignoriert.
Funktionsüberladung simulieren
Verwenden Sie das Argumentobjekt, um die Anzahl der Parameter zu bestimmen, die an die Funktion übergeben werden, um eine Funktionsüberladung zu simulieren:
function doAdd() { if(arguments.length == 1) { alert(arguments[0] + 5); } else if(arguments.length == 2) { alert(arguments[0] + arguments[1]); } }
doAdd(10); //Ausgabe „15“
doAdd(40, 20); //Ausgabe „60“
Wenn nur ein Parameter vorhanden ist, fügt die Funktion doAdd() dem Parameter 5 hinzu. Wenn zwei Parameter vorhanden sind, werden die beiden Parameter addiert und ihre Summe zurückgegeben. DoAdd(10) gibt also „15“ aus, während doAdd(40, 20) „60“ ausgibt.
Obwohl es nicht so gut ist wie eine Überladung, reicht es aus, um diese Einschränkung von ECMAScript zu umgehen.