Ziele in JavaScript
Wir haben bereits behandelt, daß Argumente Werte sind, die beim Aufruf einer Funktion an diese Funktion übergeben werden können.
Es gibt neben den Argumenten bei einigen Funktionen aber auch noch einen anderen Wert, der ihn übergeben werden kann oder muß – das Ziel.
Wir betrachten beispielsweise die Funktion »this.String.prototype.toLowerCase«, welche einen kleingeschriebenen Text ergibt.
Diese Funktion kann auf die bisher behandelte Weise nicht aufgerufen werden!
- Auswertung
this.String.prototype.toLowerCase( "AbCd" )
""
Der Aufruf führt zwar nicht zu einer Fehlermeldung, aber er liefert nicht das richtige Ergebnis.
Die Funktion »this.String.prototype.toLowerCase« enthält vielmehr eine andere Funktion »call«, die zum Aufruf verwendet werden muß.
- Auswertung
this.String.prototype.toLowerCase.call( "AbCd" )
"abcd"
Die Funktion »call« nicht einen normalen Argumentwert entgegen und sorgt dann dafür, daß die sie enthaltende Funktion »toLowerCase« mit diesem Argumentwert als Ziel aufgerufen wird. Dadurch kann sie den Text »AbCd« dann richtig verarbeiten.
Das Verzeichnis »this.String.prototype« enthält einige für die Verarbeitung von Zeichenfolgen nützliche Funktionen, die aber alle mit Hilfe von »call« aufgerufen werden müssen. Wenn »call« mehrere Argumente erhält, so wird das erste als Ziel an die enthaltenden Funktion weitergegeben und alle anderen werden in der gegebenen Reihenfolge zu Argumente. Der direkt folgende Aufruf ruft »this.String.prototype.replace« beispielsweise mit dem Ziel »AbCd« und den beiden Argumenten »b« und »x« (in dieser Reihenfolge) auf.
- Auswertung
this.String.prototype.replace.call( "AbCd", "b", "x" )
"AxCd"
Warum kann man »this.String.prototype.replace« nun nicht direkt, sondern nur über den Umweg über »call« aufrufen?
Der genaue Grund dafür wird erst später in diesem Kurs erklärt werden. Wir haben durch die Behandlung von »call« in dieser Lektion allerdings nun zwei Vorteile gewonnen: Zum einen wissen wir jetzt grundsätzlich, wie wir die manchmal nützlichen Funktionen aus dem Verzeichnis »this.String.prototype« aufrufen, und zum anderen sind wir jetzt schon auf die spätere, vertiefende Behandlung dieses Themas vorbereitet.