OOP mit JavaScript - Konstruktorfunktionen - Literale
1. Auch das geht
Man kann Objektliterale auch in Konstruktorfunktionen verwenden. Dabei muss man allerdings auf zwei Dinge achten. Wenn man die klassische
Schreibweise mit var
nimmt, so sind sie "gekapselt", man kann also nicht direkt von außen darauf zugreifen, sondern nur
innerhalb des Konstruktors.
function Konstruktor()
{
var literal =
{
eigenschaft : 'blubb',
methode : function()
{
alert (this.eigenschaft);
}
}
// Funzt
literal.methode();
}
var obj = new Konstruktor;
// Funzt net
obj.literal.methode();
2. Böse, böse
Es gibt allerdings noch eine sehr krude Möglichkeit, die aber das gesamte Konstrukt ad absurdum führt. Wenn man das Literal über ein
return
zurückgibt, so kann auch außerhalb darauf zugreifen.
function Konstruktor()
{
this.eigenschaft = 'blubb';
var literal =
{
methode : function()
{
alert ('hallo');
}
}
return literal;
}
var obj = new Konstruktor;
obj.methode();
Aber!
Versucht jetzt mal bei obigem Beispiel auf die öffentliche Eigenschaft zuzugreifen. Geht nicht! Warum? Ganz einfach, normalerweise gibt so eine Konstruktorfunktion sich selbst als Objekt zurück. In diesem Fall aber nur das Literal. Damit könnt ihr jetzt zwar machen was ihr wollt, aber der Rest ist tabu.
3. So ist es brav
Innerhalb eines Konstruktors gibt es eine alternative Schreibweise, die auch einen Zugriff von außen zulässt. Anstelle des var
nimmt man einfach ein this
.
function Konstruktor()
{
this.literal =
{
eigenschaft : 'blubb',
methode : function()
{
alert (this.eigenschaft);
}
}
}
var obj = new Konstruktor;
obj.literal.methode();
Und was ist mit einem Literal in einem Literal in einer Konstruktorfunktion? Ganz einfach, probiert es aus.
zurück zum vorherigen Abschnitt weiter zum nächsten Abschnitt