Okt 2008

Objekte

 
 

Objekte sind Behälter für logisch zusammen gehörenden Variablen und Funktionen, die als »Eigenschaften« und »Methoden« des Objekts bezeichnet werden. Objekte kapseln Daten und Logik nach außen ab und bieten eine einfache Schnittstelle zu ihren Elementen.

Objekte-kapseln.png

In einem Objekt können alle möglichen Daten gesammelt werden – vom einfachen Integer bis hin zu anderen Objekten. So könnte ein Javascript-Objekt z.B. ein HTML-Formular abbilden und Methoden (Funktionen, die in Objekten liegen) zum Prüfen von Eingaben anbieten.

Die Eigenschaften eines Objekts können von einem beliebigen Datentyp sein und eine Eigenschaft kann selber wieder ein Objekt sein.

Die Eigenschaften eines Javascript-Objekts können wir uns als besondere Variablen einer Javascript-Funktion vorstellen, auf die von außerhalb der Funktion zugegriffen werden kann.

Beispiel für ein einfaches Objekt

In Javascript existiert bereit ein primitives Objekt als Vorlage für eigene Objekte. Von diesem Objekt sind alle anderen Objekte abgeleitet. Ein neues Objekt wird durch durch den new-Operator und den Object() oder Funktions-Konstruktor erzeugt.

Objekte werden in einem zweistufigen Prozess erzeugt:

  1. Die Deklaration eines Objekts legt eine Vorlage für ein Objekt an.
  2. Der new-Operator erzeugt die Datenstruktur – man sagt dazu »das Objekt wird instanziert«.
var obj = new Object;
     ^     ^
     |     |
     |     |
     |     +--- neues Objekt der Art "Objekt erzeugen"
     +--- das neue Objekt heißt "obj"

obj.x = 1;
    ^
    +--- Eigenschaft x
obj.y = 2;
    ^
    +--- Eigenschaft y

Das erzeugt ein Javascript-Objekt mit den Eigenschaften x und y.

Am Rande: Nach diesem Muster werden auch Array-, Date-, Boolean- und String-Objekte erzeugt.

var farben = new Array ("rot", "grün", "blau");
var gruss  = new String ("Fröhliche Ostern");
var tag    = new Date();
var num    = new Number(); 

Ein Objekt "formular" könnte z.B. die Eingabefelder eines Formulars enthalten.

var formular = new Object;

formular.firstName = document.getElementById('firstName');
formular.lastName  = document.getElementById("lastName");
formular.plz       = document.getElementById("plz");
formular.ort       = document.getElementById("ort");

Das Erzeugen eines eigenen Objekts als Instanz des primitiven Objekts gruppiert logisch zusammengehörende Variablen und Funktionen. Der Zugriff auf die Elemente des formular-Objekts mittels des Präfix »formular« macht das Programm lesbarer.

Alternative Kurzformen

Alternativ kann man das Objekt in einer Kurzform deklarieren, instanzieren und initialisieren

Implizite Kurzschrift               |    Literale Syntax
                                    |
var adress = new Object();          |    var adress = { lastName: "Meier",
adress = { lastName: "Meier",       |                    plz:      47111,
           plz:      47111,         |                    ort:      "Neukirchen"
           ort:      "Neukirchen"   |                  }
         }                          |

Die beiden Anweisungen sind syntaktisch äquivalent; die zweite Syntax wird als literale Syntax bezeichnet und ist bequemer.

Objekt-Referenzen

Eine gewöhnliche Variable verweist auf Speicherplätze fester Größe, die sich zur Laufzeit nicht ändern. Objekte hingegen speichern keine Daten wie Variablen, sondern verweisen nur auf die Werte.

Referenztypen wie Objekte hingegen verweisen nicht direkt auf Speicherplätze, sondern auf eine Sammlung von Referenzen – erst diese Referenzen verweisen auf einen bestimmten Speicher.

referenz.png

Für Einsteiger heißt das: Eine Referenz enthält keinen Wert, sondern nur etwas, was auf Werte verweist. Die Deklaration eines Objekts weist dem Objekt keine Werte zu, sondern nur Eigenschaften.

Die Javascript-Objekthierarchie

Viele Javascript-Objekte sind selber in anderen Objekten enthalten. Javascript-Objekte haben ein „ist enthalten in“ <-> „ist Behälter von“-Verhältnis zueinander und kein Klassen<->Unterklassen-Verhältnis. Eigenschaften werden nicht von einem Objekttyp auf einen anderen vererbt.

Javascript-Objekte versus Klassen

In vielen objektorientierten Programmiersprachen wird ein Objekt durch eine Klasse deklariert. JavaScript kennt keine Klassendefinition:

Javascript kennt keine klassenorientierte Vererbung, dafür aber eine Prototyp-basierte Vererbung. Javaccript-Objekte haben keine Klasse-Unterklasse-Verhältnisse, sondern sind ineinander enthalten.

Die beiden wichtigsten Methoden, mit denen Objekt-Systeme aufgebaut werden, sind die Vererbung (is-a) und die Aggregation (has-a). JavaScript ist eine Prototyp-basierte Sprache, die vorgibt, eine Klassen-basierte Sprache zu sein.

  • Ein Objekt ist eine gekapselte Datenstruktur mit Dateneigenschaften (properties) und Methoden (functions, methods)
  • Properties sind Javascript-Variablen oder andere Objekte, Methoden bearbeiten Objekt-Eigenschaften
  • selbstdefinierte Objekte sind möglich
  • Objekte in der OOP sind eigentlich Instanzen (Ausprägungen) bestimmter Klassen
  • Hier aber kein ausgereiftes Klassenkonzept mit Vererbung, nur ein Objektkonzept!

Javascript hat Objekte, die Daten und Methoden enthalten und Objekte in Javascript können andere Objekte enthalten. Javascript hat keine Klassen, hat aber Konstruktoren, die dasselbe können wie Klassen und auch als Behälter für Eigenschaften und Methoden dienen.

   


Copyright © 2000 - 2010 Media Engineering Alle Rechte vorbehalten
Design + Programmierung Media Engineering U. Häßler 47506 Neukirchen-Vluyn • Impressum und Nutzungsbestimmungen