# Wie funktioniert Funktionsüberladung in Javascript?



## kirdie (23. Jul 2011)

Ich habe eine Funktion mit vielen Parametern und habe deshalb Abkürzungen definiert:


```
function insertImageChanger(name,urls,width,height,link)
{
 // code
}

// Abkürzungen
function insertImageChanger(name,urls) {insertImageChanger(name,urls,null,null,null);}
function insertImageChanger(name,urls,width,height) {insertImageChanger(name,urls,width,height,null);}
function insertImageChanger(name,urls,link) {insertImageChanger(name,urls,null,null,link);}
```

Merkwürdigerweise bekomme ich, wenn ich 
	
	
	
	





```
insertImageChanger(name,urls,link)
```
 aufrufe jedoch den Fehler, dass etwas mit der Breite nicht stimme, also scheint Javascript die falsche Funktion aufzurufen, nämlich 
	
	
	
	





```
insertImageChanger(name,urls,width,height)
```
 aber mit dem Link als Breite.

Was kann ich dagegen tun?


----------



## Gast2 (23. Jul 2011)

Du kannst in Javascript keine Methoden überlagern.
Java nimmt für die Signatur einer Methode die Parameter her, Javascript tut das nicht.


----------



## Gregorrr (23. Jul 2011)

Hi,

mach das doch einfach so:


```
function insertImageChanger(name,urls, opt)
{
 // code
}
```

Die opt-Variable kann dann jedes Objekt beinhalten:
siehe hier: Function overloading in Javascript - Best practices - Stack Overflow


----------



## schlingel (25. Jul 2011)

Die vorgeschlagene Lösung von Gregorrr finde ich um nichts hübscher bzw. hässlicher als in der Methode selbst zu prüfen ob der Parameter verwendet wurde:


```
function myMethod(arg1, arg2, arg3) {
  if(arg2 == undefined) { arg2 = null; }
  if(arg3 == undefined) { arg3 = null; }
  // ...
}

myMethod(123); // valider Aufruf
myMethod(123, 12); // valider Aufruf
myMethod(123, 123, 123); // valider Aufruf
```


----------



## Evil-Devil (25. Jul 2011)

In Javascript brauchst du nichts überladen. Parameter die nicht übergeben wurden werden einfach als undefined von Javascript erzeugt.
Entweder nimmst du den Inline-Style von Gregor oder fragst die einzelnen Parameter direkt ab. Ideal wäre ein Mix aus beiden.
Hilfe hierbei bietet einem diverse JS Frameworks wie jQuery und Prototype.


```
function insertImageChanger (name, urls, options) {	
	options = options || {};	
	var defaultOptions = {
		width: options.width || 100,
		height: options.height || 100,
		link: options.link || 'www.java-forum.org'
	};
	options = defaultOptions;
	
	// [...]
}
```

Könnte ohne Framework wie im Beispiel aussehen.


----------



## Tomate_Salat (25. Jul 2011)

oder du arbeitest mit [c]arguments[/c]:

```
function someFunc() 
{ 
    if (arguments.length == 0 ){ 
       //code
    }
}
```

verwende ich auch in meinem aktuellen projekt, bei dem die Anzahl der Parameter seeeehr Variable ist.


----------

