Fortgeschrittene OO-Programmierung in Javascript

Dank Ajax kommt die ursprünglich von Netscape entwickelte Skriptsprache Javascript mittlerweile für immer komplexere Anwendungen zum Einsatz. Fragt sich, ob sie überhaupt das Zeug dazu hat.

In Pocket speichern vorlesen Druckansicht
Lesezeit: 22 Min.
Von
  • Andreas Junghans
  • Tilman Schneider
Inhaltsverzeichnis

Javascript hat unter Softwareentwicklern keinen besonders guten Ruf. Die Sprache gilt als relativ unstrukturiert, fehleranfällig und ganz allgemein untauglich, große Anwendungen zu erstellen – und vor allem zu pflegen. Schuld an diesem Image dürfte vor allem das ungewohnte objektbasierte Prinzip der Sprache sein: Statt Klassen gibt es nur Objekte, statt Methoden nur Funktionen, und ein Compiler zur Typ- und Syntaxprüfung existiert gar nicht. Dieser Artikel soll zeigen, wie man dennoch mit bekannten (und weniger bekannten) Mitteln vollständig objektorientierte und wartbare Anwendungen erstellen kann.

In Javascript ist bis auf primitive Typen wie Zahlen alles ein Objekt. Dazu zählen sogar Funktionen (man könnte von Funktionsobjekten sprechen), die ausführbaren Code in sich kapseln. Die wichtigste Eigenschaft von Javascript-Objekten ist, dass sie als assoziative Arrays arbeiten: Jedem Objekt kann man per objekt.name = wert beliebige Attribute hinzufügen. Als Werte sind auch Funktionsobjekte zulässig, die man wie Methoden aufrufen kann.

Im Zusammenspiel mit dem new-Operator kommen Funktionen als Konstruktoren zum Einsatz (siehe Listing 1). new bewirkt, dass ein neues Objekt erzeugt wird – zunächst noch ohne Attribute -, auf das der Programmierer innerhalb des Konstruktors über das Schlüsselwort this zugreifen kann. Innerhalb von Funktionen, die über den Punkt-Operator auf einem bestimmten Objekt aufgerufen werden, im Listing testPerson.getName(), steht dieses Objekt ebenfalls als this zur Verfügung.

Obwohl es in Javascript nur Objekte und Funktionen gibt, sei im Folgenden von Klassen und Methoden die Rede. Gemeint sind damit Klassen als objektorientiertes Konzept, in Javascript durch Konstruktor-Funktionen abgebildet, sowie Funktionen, die als Attribute an einem Objekt hängen.