| Andreas Rozek |
|
Rhino_03 - nimmt Funktionsobjekte unter die LupeUnter JavaScript können Funktionsobjekte sowohl implizit angeschrieben als auch explizit erzeugt werden (letzteres mithilfe des Function-Konstruktors). Auch der Aufruf kann entweder implizit (durch Anschreiben des Namens und einer rund geklammerten, ggfs. leeren Liste mit Funktionsargumenten) oder explizit (mithilfe der Methoden apply und call) geschehen. "Rhino_03" experimentiert mit allen diesen Varianten und untersucht zudem, inwiefern JavaScript-Funktionsobjekte selbstbeschreibend sind. Der Quelltext des Skriptes ist denkbar einfach und muß nicht weiter erläutert werden. Das Programm wird ohne weitere Parameter aufgerufen java Rhino Rhino_03.js und liefert folgende Ausgabe: Rhino_03 - investigates "Function" objects
listProperties.toString() ->
function listProperties(Prefix) {
CursorPos = 0;
for (Key in this) {
if ((CursorPos > 0) && (CursorPos + 2 + Key.length > 78)) {
println(",");
CursorPos = 0;
}
if (CursorPos == 0) {
print(Prefix, Key);
CursorPos = Prefix.length + Key.length;
} else {
print(", ", Key);
CursorPos += 2 + Key.length;
}
}
if (CursorPos > 0) {
println();
}
}
explicitFunction.toString() -> function anonymous(a) {
return a;
}
reflection capabilities of JavaScript functions: reflectiveFunction() ->
- caller: undefined
- callee:
function reflectiveFunction() {
println(" - caller: ", reflectiveFunction.caller);
println(" - callee: ", arguments.callee);
println(" - number of supplied arguments: ", arguments.length);
}
- number of supplied arguments: 0
listProperties.apply(UserObject,new Array(" ")) ->
a, b, c
listProperties.call(UserObject," ") ->
a, b, c
Eine interessante Eigenschaft von JavaScript ist die Möglichkeit, den Quelltext einer Funktion einzusehen - zumindest in einer "kanonischen" Form ohne Kommentare und in einem vom System festgelegten Format. Jede ausgeführte Funktion verfügt über eine explizite (wenn auch ggfs. leere) Liste mit allen beim Aufruf übergebenen Argumenten und kann außerdem sowohl auf die aufrufende Funktion als auch "sein" eigenes Funktionsobjekt explizit zugreifen. Auch der explizite Aufruf von Funktionen mittels apply und call kann von Zeit zu Zeit ganz hilfreich sein. QuelltexteDas hier vorgestellte Skript ist im Quelltext verfügbar:
|
| http://www.Andreas-Rozek.de/Rhino/Acquainting/Rhino_03.html | (letzter Stand: 06.04.2002) |