Wie kann das Überladen in JavaScript / jQuery implementiert werden?

7

Ich versuche Funktionen mit derselben Signatur aufzurufen.

Beispiel: Es gibt zwei Funktionen mit demselben Namen:

%Vor%

Wenn ich Funktion auf klicke Ereignis des Links

%Vor%

Wenn ich auf den obigen Link klicke, ruft er die Funktion OpenBox (obj1, obj2, obj3, obj4, obj5) {}

auf

Es sollte Aufruffunktion sein OpenBox (obj1, obj2) {} Stattdessen.

Was läuft falsch in Funktionen?

    
Abhishek B. 24.06.2011, 06:50
quelle

7 Antworten

13

mattn hat die richtige Idee. Da Javascript keine Eingabe hat, sind diese Funktionen äquivalent. Was Sie tun könnten, ist etwa so:

%Vor%     
Mikola 24.06.2011, 06:55
quelle
5

Javascript kann keine doppelte Funktion im selben Umfang definieren. Überprüfen Sie arguments.length auf 2 oder 5.

    
mattn 24.06.2011 06:54
quelle
2

@abshik,

Es gibt nichts Vergleichbares wie c # oder java. Javascript verhält sich so

%Vor%

Wenn Sie diese Funktion aufrufen, können Sie die folgenden Möglichkeiten aufrufen:

%Vor%

Aber Reihenfolge ist wichtig, also können Sie die Funktion auf die oben genannten Arten ausführen.

    
kobe 24.06.2011 06:59
quelle
2

Das Problem ist, dass Sie versuchen, eine Funktion zu überlasten, die aber von Javascript nicht unterstützt wird. Ich denke, deine beste Option ist es stattdessen Polymorphismus zu verwenden. Sehen Sie diesen Artikel für weitere Details: Ссылка

    
Joe Francis 16.01.2012 11:45
quelle
2

Sie können Funktionen in JavaScript nicht überladen. Stattdessen wird die zuletzt definierte Version der Funktion verwendet, weshalb in Ihrem Fall die Version mit 5 Parametern aufgerufen wird (die letzten 3 sind nur undefined ).

Dafür gibt es mehrere Möglichkeiten, eine, die in Mikolas Antwort gezeigt wird. Eine Alternative besteht darin, ein Objekt zu übergeben und dann den Inhalt dieses Objekts in der Funktion zu überprüfen (siehe diese Frage ):

%Vor%

Eine weitere Möglichkeit ist, arguments.length :

zu überprüfen %Vor%     
James Allardice 24.06.2011 07:04
quelle
1

Sobald eine Funktion in Ecmascript definiert ist, ist dieser Name gesperrt. Sie können jedoch eine beliebige Anzahl von Parametern an diese Funktion übergeben, so dass Sie den Rest der Arbeit auf der Innenseite erledigen.

%Vor%

Interessanter Hinweis: Sie können zusätzliche Parameter übergeben, die nicht in der Funktionsdeklaration enthalten sind. Mach ein console.log von arguments und du wirst alles darin sehen. arguments ist ein object , auf das wie / typecasted auf ein array zugegriffen werden kann.

    
Jacksonkr 29.01.2014 14:32
quelle
1

Im Polymorphismus können Sie eine andere Unterschriftsmethode verwenden, in Javascript können wir Polymorphismus simulieren, indem wir den Typ des Funktionsparameters überprüfen und eine bestimmte Aufgabe ausführen.

%Vor%

Überprüfen Sie dieses Beispiel in JSFIDDLE

    
quelle