# Function

Allgemeines zur Verwendung

### Eigenschaften:

arguments (Argumentnamen-Array)
arity (Anzahl Argumente)
caller (Namen der aufrufenden Funktion)

## Function: Allgemeines zur Verwendung

Über das Objekt `Function` haben Sie Zugriff auf Eigenschaften einer JavaScript- Funktion. JavaScript-Funktionen werden dadurch also selbst Gegenstand von JavaScript-Anweisungen. Sinnvoll ist das Arbeiten mit dem Function-Objekt beispielsweise im Zusammenhang mit einer variablen Anzahl von Parametern in einer Funktion.

Ein neues `Function`-Objekt können Sie extra erzeugen.

### Beispiel:

    var Farbe = new Function("NeueFarbe", "document.bgColor = NeueFarbe;");

### Beispielentsprechung in normaler Schreibweise:

    function Farbe (NeueFarbe) {
      document.bgColor = NeueFarbe;
    }

### Beispielaufruf für beide Fälle:

    <a href="javascript:Farbe('#FFCC99')">Neue Hintergrundfarbe</a>

### Erläuterung:

Betrachten Sie in dem Beispiel zunächst den mittleren Teil ("Beispielentsprechung in normaler Schreibweise"). Das ist die normale Definition einer Funktion. Im Teil darüber wird die gleiche Funktion definiert, jedoch in Form eines Funktionsobjekts. Das Funktionsobjekt wird mit `new Function(...)` erzeugt. Der Rückgabewert wird in einer Variablen gespeichert, im Beispiel in der Variablen `Farbe`. Als Parameter erwartet die `Function`-Funktion eine beliebige Anzahl Parameter, die bis zum vorletzten als Parameter interpretiert werden, die die Funktion erwarten soll. Im Beispiel gibt es einen solchen Parameter, nämlich den Parameter `NeueFarbe`. Der letzte Parameter, der der `Function`-Funktion übergeben wird, ist eine Zeichenkette, die den gesamten Funktionsinhalt darstellt, also die JavaScript-Anweisungen innerhalb der Funktion.

Eine Variable, in der eine Funktion gespeichert ist, wie im Beispiel die Variable `Farbe`, können Sie genauso aufrufen wie eine Funktion. Der dritte Teil ("Beispielaufruf für beide Fälle") gilt tatsächlich für beide Fälle, denn im einen Fall wird die Variable `Farbe` aufgerufen, in der eine ganze Funktion gespeichert ist, und im anderen Fall wird eine Funktion namens `Farbe()` aufgerufen.

Sie müssen jedoch kein neues Funktionsobjekt erzeugen, sondern können auch direkt Eigenschaften des Funktionsobjekts auf eine Funktion anwenden.

### Beispiel für direktes Verwenden von Funktionseigenschaften:

Anzeigebeispiel: So sieht's aus

    <html><head><title>Test</title>
    </head><body>
    <script type="text/javascript">
    function HTMLListe (Typ) {
      document.write("<" + Typ + ">");
      for (var i = 1; i < HTMLListe.arguments.length; i++)
        document.write("<li>" + HTMLListe.arguments[i] + "</li>");
      document.write("</" + Typ + ">");
    }

    HTMLListe("ol", "eins", "zwei", "drei");
    </script>
    </body></html>

Das Beispiel schreibt dynamisch eine HTML-Liste, entweder als Aufzählungsliste oder als nummerierte Liste, in die Datei. Dies geschieht in einer Funktion namens `HTMLListe()`. Unterhalb der Funktion steht der Aufruf der Funktion. Dabei werden vier Parameter übergeben. Die Funktion `HTMLListe()` erwartet jedoch nur einen Parameter, nämlich den Parameter `Typ`. Dabei sollte man `ul` oder `ol` übergeben. Abhängig davon erzeugt die Funktion eine Aufzählungsliste oder eine nummerierte Liste.

Innerhalb der Funktion wird jedoch mit `HTMLListe.arguments.length` die tatsächliche Anzahl der übergebenen Elemente abgefragt. Die Funktion nimmt an, dass alle Parameter ab dem zweiten Elemente der gewünschten Liste sind. Die Funktion schreibt mit `document.write()`-Befehlen die entsprechenden Listenpunkte und setzt dabei reihenweise die übergebenen Parameter ein, da diese Aktion innerhalb einer `for`-Schleife erfolgt.

## arguments

Speichert die Argumente, die einer Funktion übergeben wurden, in einem Array, also einer Kette von Elementen. Jedes Element stellt ein Argument dar. Die Eigenschaft ist nur innerhalb der Funktion verfügbar, auf die sie sich bezieht.

### Beispiel:

Anzeigebeispiel: So sieht's aus

    <html><head><title>Test</title>
    </head><body>
    <script type="text/javascript">
    function Test (Name, Vorname) {
      document.write("Funktion bekam " + Test.arguments.length + " Argumente");
      for (var i = 0; i < Test.arguments.length; ++i)
        document.write("<BR>" + Test.arguments[i]);
    }

    Test("Muenz", "Stefan");
    </script>
    </body></html>

### Erläuterung:

Das Beispiel definiert eine Funktion `Test()`, die zwei Parameter übergeben bekommt. Die Funktion schreibt dynamisch in die HTML-Datei, wie viele Parameter sie erwartet, und danach in einer `for`-Schleife, welche Werte übergeben wurden.

Mit `Funktionsname.arguments.length` ermitteln Sie die Anzahl der tatsächlich übergebenen Parameter (nicht die Anzahl der erwarteten Parameter).

Mit `Funktionsname.arguments[0]` sprechen Sie den Wert des ersten übergebenen Parameters an, mit `Funktionsname.arguments[1]` den des zweiten Parameters usw.

### Beachten Sie:

Seit dem JavaScript-Standard Version 1.4 ist `arguments` keine Eigenschaft des Funktionsobjekts mehr, sondern steht in der Funktion als lokale Variable zur Verfügung, die Sie einfach über `arguments` statt `Funktionsobjekt.arguments` ansprechen können.

## arity

Speichert die Anzahl Argumente, die eine Funktion erwartet. Die Eigenschaft ist nur außerhalb der Funktion verfügbar, auf die sie sich bezieht.

### Beispiel:

Anzeigebeispiel: So sieht's aus

    <html><head><title>Test</title>
    <script type="text/javascript">
    function Test (Name, Vorname) {
      return (Vorname + " " + Name);
    }

    alert("Funktion erwartet " + Test.arity + " Argumente");
    </script>
    </head><body>
    </body></html>

### Erläuterung:

Das Beispiel definiert eine Funktion `Test()`, die zwei Parameter erwartet. Die Funktion wird im Beispiel gar nicht aufgerufen, dafür wird in einem Meldungsfenster ausgegeben, wie viele Argumente die Funktion `Test()` erwartet. Dazu wird die Eigenschaft `arity` auf die gewünschte Funktion angewendet.

### Beachten Sie:

Mit dem JavaScript-Standard Version 1.4 wurde `arity` als veraltet erklärt und durch die Eigenschaft `length` ersetzt. Diese Eigenschaft können Sie genauso wie `arity` verwenden, z.B. `Funktionsobjekt.length`.

## caller

Speichert die gesamte Funktion, von der aus die aktuelle Funktion aufgerufen wird. Hat den Wert `null`, falls der Aufruf direkt von einem Event-Handler oder beim Einlesen der Datei von außerhalb einer anderen Funktion erfolgte. Die Eigenschaft ist nur innerhalb der Funktion verfügbar, auf die sie sich bezieht.

### Beispiel:

Anzeigebeispiel: So sieht's aus

    <html><head><title>Test</title>
    <script type="text/javascript">
    function Test () {
      alert(Test.caller);
    }

    function Aufruf () {
      Test();
    }
    </script>
    </head><body>
    <a href="javascript:Aufruf()">Wer ruft Test()?</a>
    </body></html>

### Erläuterung:

Das Beispiel definiert im Dateikopf zwei Funktionen, eine Funktion `Test()` und eine Funktion `Aufruf()`. Die Funktion `Test()` tut nichts anderes als auszugeben, von wo sie aufgerufen wurde, die Funktion `Aufruf()` nichts anderes, als `Test()` aufzurufen. In der Datei ist ferner ein Verweis notiert. Beim Anklicken des Verweises wird die Funktion `Aufruf()` aufgerufen, die wiederum `Test()` aufruft, woraufhin `Test()` den gesamten Code der Funktion `Aufruf()` ausgibt.

### Beachten Sie:

Die `caller`-Eigenschaft wurde in JavaScript 1.3 als veraltet ("deprecated") erklärt. Ein Ersatz existiert nicht.

| Math
| Date

© 2007 Impressum