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