Hallo,
Was Vererbung in JS angeht ist Douglas Crockford empfehlenswert.
Crockford beschreibt dort, wie die klassische Vererbung mit JavaScript umgesetzt wird. Mir persönlich (und auch ihm) gefällt inzwischen der weitgehende Verzicht auf Konstruktoren besser, wie in seinem Artikel Prototypal Inheritance in JavaScript beschrieben.
@Krt Z:
Zur Verdeutlichung folgendes Beispiel:
*** Klassische Vererbung: ***************************************************
var
Ort = function () {},
Chef = function () {},
Ort1 = function () { this.ort = "Ort 1" },
Chef1 = function () { this.name = "Ferengi" },
Ort2 = function () { this.ort = "Ort 2" },
Chef2 = function () { this.name = "Mensch" },
statusQuo = function () {
var welt = new Ort(); welt.chef = new Chef();
alert( welt.ort + ' wird beherrscht von der Spezies ' + welt.chef.name );
}
;
Ort.prototype = new Ort1();
Chef.prototype = new Chef1();
statusQuo();
Ort.prototype = new Ort2();
Chef.prototype = new Chef2();
statusQuo();
// Die Außerirdischen kommen:
Chef.prototype = new Chef1();
statusQuo();
*** Reine prototypische Vererbung nach Crockford: ********************************
var object = function(o){function F(){}F.prototype=o;return new F();}; // Crockford
var
Ort = {},
Chef = {},
Ort1 = { ort: "Ort 1" },
Chef1 = { name: "Ferengi" },
Ort2 = { ort: "Ort 2" },
Chef2 = { name: "Mensch" },
statusQuo = function () {
var welt = Ort;
welt.chef = Chef;
alert( welt.ort + ' wird beherrscht von der Spezies ' + welt.chef.name );
}
;
Ort = object(Ort1);
Chef = object(Chef1);
statusQuo();
Ort = object(Ort2);
Chef = object(Chef2);
statusQuo();
// Die Außerirdischen kommen:
Chef = object(Chef1);
statusQuo();
****************************************************************************
Wie man sieht, leisten beide Versionen das gleiche, aber die zweite Variante kommt wesentlich schlanker und m.M.n. schöner daher, weil auf die ständige Wiederholung der Schlüsselwörter new, function, this und prototype verzichtet werden kann.
Selber habe ich dann Crockfords genialer Funktion "object" noch eine weitere zur Seite gestellt, die es erlaubt ein Objekt zu klonen, d.h. nicht nur ein neues, eigentlich leeres Objekt mit den gleichen Eigenschaften zu erhalten (die eigentlich nur vom Prototyp "durchscheinen") wie bei Crockford, sondern otional auch ein Objekt, das alle oder auch nur gewisse Eigenschaften wirklich selbst hat. Man gibt einfach als zweiten Parameter ein Objekt an, dessen Eigenschaften/Methoden das neue Objekt dann selbst haben soll. Das können auch zusätzliche Eigenschaften/Methoden sein, die das Ursprungsobjekt nicht hatte.
Gruß, Don P
sh:( fo:) ch:? rl:( br:] n4:~ ie:% mo:? va:{ js:) de:/ zu:] fl:( ss:| ls:&