A.4 JavaScript 

JavaScript wurde ursprünglich bei Netscape entwickelt und hatte seinen ersten Einsatz in der Version 2 des Netscape Navigators. JavaScript wurde dort eingesetzt, um Webseiten mit dynamisch erzeugten Inhalten zu versehen. Microsoft entwickelte eine Entsprechung hierzu unter dem Namen JScript. In den Versionen des Internet Explorers ab Version 3.0 wird also nicht eigentlich JavaScript unterstützt, sondern JScript. Allerdings erfolgte eine Vereinheitlichung der beiden damit existierenden De-facto-Standards unter dem Namen ECMA-Script. ECMA stand ursprünglich für European Computer Manufacturers Association, mittlerweile gibt es diese aber nicht mehr unter diesem Namen, und die ECMA ist zu einer Institution geworden, die Standards im Bereich der IT-Technologie verwaltet. Wenn das verwirrend klingt, ist das kein Zufall. Es ist nämlich verwirrend. Zwar basieren die aktuellen Versionen von JavaScript und JScript beide auf der Version ECMA-262, Revision 3. Die beiden Sprachen bringen jedoch jeweils eigene Erweiterungen mit ein, so dass für eine Variante erstellte Skripte nicht unbedingt in einem anderen Browser lauffähig sind.
Allerdings hat sich als Name weder JScript noch ECMAScript durchgesetzt. Und man muss auch zugeben, dass ECMAScript nun wirklich kein schöner Name ist. Deshalb wird in der Regel einfach der Name JavaScript verwendet, auch wenn dabei eigentlich der Standard (ECMAScript) oder die Umsetzung des Standards in den Microsoft-Produkten (JScript) gemeint ist. Mit Java hat JavaScript außer der Namensähnlichkeit sehr wenig gemeinsam. Die Syntax basiert eher locker auf der Sprache C, die objektorientierten Mechanismen von JavaScript sind völlig andere als die von Java.
Struktur von JavaScript
JavaScript ist dynamisch typisiert und wird in der Regel in der jeweiligen Laufzeitumgebung (häufig ein Webbrowser) interpretiert.
JavaScript kennt keine Klassen. Eine Art von Vererbungsbeziehung ist dennoch über die Zuordnung von sogenannten Prototypen möglich. Jedem Objekt kann dadurch ein Prototyp (wieder ein Objekt) zugeordnet werden, dessen Eigenschaften das Objekt mit übernimmt. Dadurch können Ketten aufgebaut werden, die eine Art von Vererbungsbeziehung darstellen. Jedes Objekt erbt damit alle Eigenschaften der folgenden Objekte in der Kette.
Da diese Beziehungen zwischen Objekten bestehen und nicht zwischen Klassen, können die Struktur und die Eigenschaften aller Objekte zur Laufzeit angepasst werden. Wird also ein Objekt zur Laufzeit geändert, das als Prototyp für mehrere andere Objekte agiert, ändern sich auch die Eigenschaften dieser beteiligten Objekte.
Syntax von JavaScript
function StructuredName()
{
// ... Funktionalitäten von strukturierten Namen
}
function VersionNumber(parts)
{
this.parts = parts;
this.toString = function()
{
description = "";
for (var i = 0; i < parts.length – 1; ++i)
{
description = description + parts[i] + ".";
}
return description + parts[parts.length – 1];
};
}
VersionNumber.prototype = new StructuredName();
var parts = new Array("6","0","2800","1106");
var version = new VersionNumber(parts);
alert(version.toString());
version.product = "Internet Explorer";
- Die Funktion VersionNumber, die als Vorlage für Objekte dient.
- Jedes über die Funktion VersionNumber erstellte Objekt enthält eine Variable mit dem Namen parts. Da JavaScript dynamisch typisiert ist, ist der Typ der Variablen nicht festgelegt. Da die Variable über this.parts deklariert ist, ist sie auch nach außen sichtbar. Wenn wir stattdessen die Deklaration var myparts = parts verwendet hätten, wäre die Sichtbarkeit auf interne Methoden beschränkt. In JavaScript lassen sich also durchaus Entsprechungen zu privaten Instanzvariablen realisieren.
- Jedes über die Funktion erstellte Objekt hat wiederum eine Methode toString, die an dieser Stelle implementiert wird.
- An dieser Stelle wird die Annahme gemacht, dass es sich bei parts um ein Array handelt, das hier durchlaufen wird. Sollte parts zur Laufzeit mit einem Objekt eines anderen Typs belegt sein, kommt es zu einem Laufzeitfehler.
- Die Methode toString gibt ihr Ergebnis über return zurück.
- Über die Zuweisung VersionNumber.prototype = new StructuredName() wird eine Vererbungsbeziehung etabliert. Die über die Funktion VersionNumber erstellten Objekte haben alle Eigenschaften, die das über new StructuredName() erstellte Objekt aufweist.
- Wir legen ein Objekt vom Typ Array an und weisen dieses der Variablen parts zu.
- Über den Aufruf von new in Kombination mit einer Funktion wird die Funktion als Objektkonstruktor benutzt. Es wird ein neues Objekt erstellt und mit den in der Funktion definierten Eigenschaften ausgestattet.
- Die Methode toString wird für das neu angelegte Objekt aufgerufen.
- Dem Objekt, das der Variablen version zugewiesen ist, ordnen wir nun ein neues Attribut product zu und belegen es mit dem Wert »Internet Explorer«. Damit unterscheidet sich dieses Objekt in seiner Struktur von anderen Objekten, die über die Funktion VersionNumber angelegt wurden.
Ressourcen
Eine online verfügbare gute Dokumentation zur JavaScript ist Teil der von Stefan Münz gepflegten Selfhtml-Webseite. Unter http://de. selfhtml.org/javascript/ findet sich eine gute Übersicht über die Sprache und auch ihre Geschichte.
Ihre Meinung
Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.