regenfeld: Objekthierarchien selbst definieren

Beitrag lesen

Grüssi,

Wenn ich noch mal zusammenfassen darf:
Methoden besser mit *prototype* definieren und nicht direkt im Konstruktor.

Nunja, nochmal andersrum: Deine Klasse Book erbt quasi per default properties bzw. funktionen von seinem prototype-Objekt. Alles was im prototype "drin steht" steht allen Book-Objekten (gleichermassen) zur Verfügung. Wenn du nur VB kannst wird dir das nicht viel sagen, aber in Java würd sich das ca so lesen:

class Book extends prototype {
   ...
}

oder so ähnlich, nur dass nicht explizit vererbt werden muss!

Beispiel:

function Circle {x,y,r} {
   this.x=x; this.y=y; this.r=r;
}

Circle.prototype.pi = 3.1415;

Somit teilen Sich alle Circle Objekte diese Variable 'pi'. Wenn nun eine Klasse keine pi-Variable definiert, schaut der Javascript-Interpreter ob im prototype eine pi-Variable ist. Allerdings kann man diese pi auch in der Klasse überschreiben.

Kurz gesagt *g* Das prototype-Objekt ist sowas wie ein Defaultkonstruktor, in dem Variablen/Funktionen vorgegeben werden können.

Es können übrigens auch andere Objekte prototypes haben. Du kannst beispielsweise eine Spezial-methode für alle String-Objekte einführen:

function myEndsWith ( c ) {
   return ( c == this.charAt( this.length - 1 ) )
}

String.prototype.endsWith = myEndsWith;

var message = "huhu"
message.endsWith(h);  // gibt false zurück
message.endsWith(u);  // gibt true  zurück

Über die Begründung werde ich bei Gelegenheit nochmals meditieren ;-)

besser: iterieren ;-)

lg regenfeld