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