regenfeld: Objekthierarchien selbst definieren

Beitrag lesen

Grüssi,

Ich würde gerne Objekthierarchien definieren; aber was beispielsweise mit VB ein Kinderspiel ist, will mir mit JavaScript nicht so recht gelingen. Das Problem sehe ich in den Arrays.

Beispiel:

function Book(Titel, Autor) {
this.Titel = Titel;
this.Autor = Autor;
this.Kapitel = new Array();
}

function Chapter(Ueberschrift) {
this.Ueberschrift = Ueberschrift;
}

var Buch = new Array();
Buch[12] = new Book("SELFHTML", "Stefan Münz");
Buch[12].Kapitel[2] = new Chapter();
Buch[12].Kapitel[2].Ueberschrift = "HTML";
Buch[12].Kapitel[5] = new Chapter();
Buch[12].Kapitel[5].Ueberschrift = "JavaScript";

Dieser Code funktioniert zwar; bei einer umfangreicheren Objekthierarchie finde ich die ewige Instanzierung (z.B. = new Chapter()) doch lästig.

äähhm, meintest du vielleicht so etwas in diese Richtung:

// Konstruktor für das Buch
function Book(Titel, Autor) {
  this.Titel = Titel;
  this.Autor = Autor;
  this.Kapitel = new Array();
}

// "Pseudo-Konstruktor" für die Kapitel
function addChapter(Index, Ueberschrift) {
  this.Kapitel[Index] = Ueberschrift;
}

// Und auch ne Methode zum ausgeben:
function getChapter (Index) {
  return this.Kapitel[Index];
}

// Die Funktion, zu einer Instanzmethode machen
Book.prototype.addChapter = addChapter;
Book.prototype.getChapter = getChapter;

// Aufruf:
b = new Book("SELFHTML","Stefan Münz");
b.addChapter(1,"Editorial");
b.addChapter(2,"Einführung");

// Test:
alert(b.getChapter(1));
alert(b.getChapter(2));

Es wär zwar schöner ein Array von Chapter-Objekten im Book-Konstruktor anzulegen, es fällt mir aber auf die schnelle nicht wirklich was dazu ein ;-)

hth,
   regenfeld