Niko: Gleichnamige Funktionen mit unterschiedlichen Parametern

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

  1. 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

    --
    »Because objects in JavaScript are so flexible, you will want to think differently about class hierarchies.
    Deep hierarchies are inappropriate. Shallow hierarchies are efficient and expressive.« - Douglas Crockford
    ie:( fl:) br:> va:( ls:& fo:) rl:) n3;} n4:} ss:} de:µ js:} mo:? zu:]
  2. 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

  3. 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