Gleichnamige Funktionen mit unterschiedlichen Parametern
Niko
- javascript
Hallo,
Ich habe ein kleines Problem, bei dem mir leider auch google nicht weiterhelfen kann. Dabei geht es darum 2 Funktionen mit gleichem Namen zu haben, die jeweils etwas anderes machen je nachdem welche Parameter man übergibt. Hier mal mein Code:
function addZeile ()
{
...fügt neue Zeile am Ende ein...
}
function addZeile (param_position)
{
...fügt neue Zeile an Position param_position ein...
}
Das Script soll jeweils entscheiden, welche Funktion genommen werden soll je nachdem welche Parameter ich beim Aufruf übergebe. Leider nimmt er in meinem Fall immer die 2. Funktion, auch wenn ich keinen Parameter übergebe.
Geht das überhaupt und wenn ja, wie bzw. was mache ich falsch?
Danke schonmal für eure Zeit und Mühe.
Lg Niko
gruss Niko,
Ich habe ein kleines Problem, bei dem mir leider auch google nicht
weiterhelfen kann. Dabei geht es darum 2 Funktionen mit gleichem
Namen zu haben, die jeweils etwas anderes machen je nachdem welche
Parameter man übergibt. ...
das konzept ueberladener funktionen wird in JavaScript nicht unterstuetzt.
... Hier mal mein Code:
[1]
function addZeile ()
{
...fügt neue Zeile am Ende ein...
}
[2]
function addZeile (param_position)
{
...fügt neue Zeile an Position param_position ein...
}Das Script soll jeweils entscheiden, welche Funktion genommen werden
soll je nachdem welche Parameter ich beim Aufruf übergebe. Leider nimmt
er in meinem Fall immer die 2. Funktion, auch wenn ich keinen Parameter
übergebe.
in [2] reinitialisierst/ueberschreibst Du das funktionsobjekt gleichen
namens/labels aus [1].
Geht das überhaupt und wenn ja, wie ...
var addZeile = (function (param_position) { // *ueberladen* durch type-detection
if (typeof param_position == "undefined") { /*
[1]
*/
} else { /*
[2]
*/
}
});
so long - peterS. - pseliger@gmx.net
Hallo Niko,
das Überladen von Methoden ist ja nichts neues. JavaScript bietet zB die Funktion arguments an, mit der geprüft werden kann, wie viele Arguemnte (und auch welche) übergeben wurden.
Da Du aber schreibst, dass beide Funktionen etwas anderes machen, scheint mir die Namensvergebung etwas unclever gewählt zu sein, da man idR. wohl eher einen default-Wert fest vorgibt und diesen nur bei Bedarf überschreibt. Im letzteren Fall geht dann wohl auch die "Kurzschreibweise":
function foo(bar)
var quxx = bar||"bat";
window.alert( quxx );
//..
}
Mit freundlichem Gruß
Micha
Hallo Niko,
Geht das überhaupt und wenn ja, wie bzw. was mache ich falsch?
Es geht nicht. Die Unterstützung überladener Funktionen/Methoden in der Runtime wird es erst in ECMAScript 4 / JavaScript 2 geben, wenn das mal browserübergreifend kommt.
Derzeit kann man es nur mit eigenem Code nachbauen. John Resig hat neulich eine Closure-basierte Funktion addMethod vorgestellt, die dieses leistet. Vorsicht: Diese Variante unterscheidet bei den Signaturen nur nach Anzahl der übergebenen Argumente, nicht jedoch nach Typ. Und es gibt natürlich etwas Overhead.
Tim