Hauptmenü

Untermenü

OOP mit JavaScript - Objektliterale - Verschachtelungen

1. Eigenschaften

Sie können beliebig tief aufgebaut sein. Man muss sich das dann als eine Art von Array vorstellen, auch wenn die Verarbeitung ein wenig anders ist. Auf die Besonderheiten gehe ich im nächsten Abschnitt ein.


var daten =
{
  person :
  {
    vorname    'Peter',
    name       'Kropff',
    geschlecht 'männlich'
  }
}

Der Zugriff

... erfolgt ganz normal über die Punktnotation. Innerhalb des Objektes sollte man mit this arbeiten, außerhalb davon muss man die Objektreferenz-/instanz angeben.


var daten =
{
  ...
  methode : function()
  {
    alert(this.person.name);
  }
}
alert(daten.person.name);

2. Methoden

Innerhalb von Methoden kann man zusätzliche Objektliterale erzeugen.


var obj_1 =
{
  eigenschaft_1 'bla',
  methode_1     : function ()
  {
    var obj_2 =
    {
      eigenschaft_2 'jodelblah',      
      methode_2     : function ()
      {
        alert (obj_1.eigenschaft_1);
        alert (this.eigenschaft_2);
      }
    }
    obj_2.methode_2();
  }
}
obj_1.methode_1();

Erläuterung

Das Literalobjekt obj_2 ist Bestandteil der Methode methode_1. Das heißt, es wurde "gekapselt" und ist nun in der Methode eingeschlossen. Das bedeutet, dass man außerhalb des umschließenden Literals obj_1 nicht darauf zugreifen kann. Das geht nur innerhalb und auch nur über den Namen des verschachtelten Literals (obj_2.methode_2();).

Dasselbe gilt auch anders herum. Will eine Methode von var obj_2 zum Beispiel auf Eigenschaften von var obj_1 zugreifen, so geschieht dies ebenfalls über den entsprechenden Namen (alert (obj_1.eigenschaft_1);).

Ein Hinweis

Anstelle von var obj_2 kann man auch mit this.obj_2 arbeiten. Trotzdem ist der Zugriff nur innerhalb von obj_1 möglich. Mein Tipp: lasst es bleiben.

3. Kapselung in Eigenschaften

Will man sein Objekt hierarchisch tiefer staffeln, so geht das über Eigenschaften, die zum Beispiel aus weiteren Methoden bestehen. Mein Tipp: übertreibt es nicht. Ich habe es mal gemacht und das Ergebnis war nicht so prickelnd.


var obj_1 =
{
  eigenschaft_1 'bla',
  eigenschaft_2 :
  {
    eigenschaft 'jodelblah',      
    methode     : function ()
    {
      alert (obj_1.eigenschaft_1);
      alert (this.eigenschaft);
    }
  }
}
obj_1.eigenschaft_2.methode();

zurück zum vorherigen Abschnitt weiter zum nächsten Abschnitt