Hauptmenü

Untermenü

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