IT-Academy Logo
Sign Up Login Help
Home - Programmieren - JavaScript - JavaScript: Funktion eines Objektes als Parameter übergeben



JavaScript: Funktion eines Objektes als Parameter übergeben

Die Syntax von JavaScript erwartet, dass eine Funktion genau soviele Parameter übergibt wie es in der Funktionsdefinition gibt. Dieser Artikel möchte eine alternative, flexiblere Methode zeigen.


Autor: Patrick Faes (dreamer)
Datum: 18-11-2004, 15:03:54
Referenzen: keine
Schwierigkeit: Anfänger
Ansichten: 22785x
Rating: 8 (1x bewertet)

Hinweis:

Für den hier dargestellte Inhalt ist nicht der Betreiber der Plattform, sondern der jeweilige Autor verantwortlich.
Falls Sie Missbrauch vermuten, bitten wir Sie, uns unter missbrauch@it-academy.cc zu kontaktieren.

[Druckansicht] [Als E-Mail senden] [Kommentar verfassen]



Einführung

JavaScript hat eine strenge Syntax wenn es zu Funktion kommt. Egal was eine Funktion machen soll, immer sollen genau soviele Parameter übergeben werden wie es auch in der Definition gibt und diese sollen dann über die vergebene Namen angesprochen werden. Ein Parameter ist dabei eine Information oder Wert der an einer Funktion übergeben werden soll, sodass diese damit arbeiten kann.

Die Definition einer Funktion sieht in JavaScript so aus:

<script type="text/javascript">
//Die Andeutung dass hier eine Funktion definiert wird
function arbeiten(Parameter1, Parameter2)
{
Wert1 = Parameter1;
Wert2 = Parameter2;
Wert3 = Wert1 + Wert2;
return Wert3;
}

//Die Funktion aufrufen
arbeiten(Wert1, Wert2);
</script>


Egal was die Funktion machen soll, sie braucht immer genau soviele Parameter wie es in der Definition gibt und in der gleichen Reihenfolge. Dies entnimmt dem Programmierer sehr viel an Flexibilität. Daher möchte ich in diesem Artikel eine alternative Methode zeigen.

Die Praxis

Die Parameter übergeben

Der Trick besteht darin nur einen einzigen Parameter zu übergeben, dieser ist dann allerdings ein Objekt. Dies bedeutet, dass alle Parameter teil eines überliegenden Objektes werden und die Parameter dann (syntaktisch) angesprochen werden als eine Eigenschaft dieses Elementes.

Das sieht dann so aus:

<script>
//Die Funktion definieren function arbeiten(sammlung)
{

}

//Die Funktion aufrufen
arbeiten( { Vorname : 'Patrick' , Beruf : Student } );
</script>


Die Funktion bekommt den Parameter mit dem Namen sammlung.
Die Funktion wird aufgerufen wie oben, jedoch wird hier der Parameter zwischen geschwungenen Klammern geschrieben, nach dem folgenden Muster:

Variablenname : Variablenwert

Diese Methode lässt allerdings keine dynamische Generierung zu, deshalb zeige ich noch eine zweite Methode, die eine extra Funktion oder Schleife braucht.

<script type="text/javascript">
sammlung1 = new Object();
personalien = new Array();
personalien["Name"] = "Patrick";
personalien["Nachname"] = "Faes";
personalien["Tätigkeit"] = "Student";

for (var inhalt in personalien)
{
sammlung1[inhalt] = personalien["inhalt"];
}

function arbeiten(sammlung2)
{

}

arbeiten(sammlung1);
</script>


Dies ist nur ein Beispiel, man kann dabei natürlich viel kreativer sein. Jedoch soll noch eine Erklärung her:

Die Variable sammlung1 wird als ein neues Objekt definieren mit new Object(). Danach bauen wir ein assoziatives Array personalien und setzen einige Werte rein. Mit einer for in-Schleife werden alle Elemente von personalien durchlaufen. Beachten Sie dabei die Notationsweise in der Schleife. Zum Schluss wird dann das Objekt an der Funktion arbeiten() übergeben.

Die Parameter auslesen

Um die Parameter aus zu lesen, bietet JavaScript 3 Möglichkeiten. Diese werden hier aufgelistet nach Rang in Vertrauenwürdigkeit.
  1. var Name = 'Name' in sammlung2? sammlung2.Name : "";
    Der in-Operator testet ob ein Element in ein Objekt gefunden werden konnte. Wenn das der Fall ist, bekommt die Variable in der Funktion den Wert des Elements, in anderem Fall bleibt es leer.
    Diese Methode ist die meist vertrauenswürdigste, jedoch wird sie erst von den neueren Browsern unterstützt, was zu Kompatibilitätsprobleme führen kann.
  2. var Name = typeof sammlung2.Name != 'undefined'? sammlung2.Name : "";
    Die Methode testet ob der Variablentyp "nicht-definiert" ist. Ein Variable ist "nicht-definiert" wenn es keinen Wert hat. Jedoch kann es vorkommen, dass eine Variable existiert, jedoch keinen Wert hat. In den meisten Fällen sollte das aber nicht zu Probleme führen.
    Mit dieser Methode kann auch getestet werden ob die Variable von einem bestimmten Typ ist. Nur wenn die Variable z.B. vom Typ String ist, wird dann die lokale Variable gefüllt.
  3. var Name = sammlung2.Name || "";
    Die letzte Methode nennt sich "automatisches Typecasting". Es ist sehr einfach: die lokale Variable ist gleich das betreffende Element des Objektes, oder (wenn das Element nicht existiert) bleibt sie leer. Jedoch ist besonders diese Methode nicht fehlerfrei, da sie nur auf TRUE reagiert (alles andere als FALSE, NaN, 0, null, undefined oder eine leere Variable).


dreamer
Expert
Beitrag vom:
18-11-2004, 20:05:54

In der erste Methode kann man das Objekt doch dynamisch generieren. Man generiert einen Code der ungefähr so aussieht:

arbeiten( { Vorname : 'Patrick' , Beruf : Student } );

Diesen speichert man dann in eine Variable (z.B. CODE) und führt ihn so aus:

eval(CODE);

Die Funktion eval() wandelt Text in ausführbarem Code um.

-----------------------------------------------------


[back to top]



Userdaten
User nicht eingeloggt

Gesamtranking
Werbung
Datenbankstand
Autoren:04511
Artikel:00815
Glossar:04116
News:13565
Userbeiträge:16552
Queueeinträge:06248
News Umfrage
Ihre Anforderungen an ein Online-Zeiterfassungs-Produkt?
Mobile Nutzung möglich (Ipone, Android)
Externe API Schnittstelle/Plugins dritter
Zeiterfassung meiner Mitarbeiter
Exportieren in CSV/XLS
Siehe Kommentar



[Results] | [Archiv] Votes: 1158
Comments: 0