Hallo,
Allerdings, eines stört mich an dieser object() Vererbungsfunktion...
var object = function(o){function F(){}F.prototype=o;return new F();};
> > ... wo bleibt dann der Konstruktor für lokale Variablen der Instanz (this.bla usw...)? (da fehlt ein Semikolon oder?)
>
> Das ist das Problem an diesem Konstrukt, es ist keine allgemein Funktion um eine Vererbung darzustellen, sondern ist nur ein Beispiel für die Vererbung von F(), d.h. du musst für jedes unterschiedliche F() das vererben soll, eine solche Funktion schreiben.
Aber nein, dann wäre das Ding ja wertlos. Es ist vielmehr ein allgemeiner Konstruktor, der von jedem beliebeigen Objekt ein neues konstruieren kann.
Statt einen Kontruktor zu notieren, und dann ein Objekt daraus zu erstellen mit z.B.
~~~javascript
var obj = function () {
this.property = value;
}
var newObj = new obj();
notiert man nur das Objekt und überlässt der Konstruktorfunktion "object" das erstellen des neuen Objekts:
var obj = {
property: value;
}
var newObj = object(obj);
Das funktioniert natürlich auch mit einem expliziten Konstruktor obj wie oben, wenn man das unbedingt will, was aber unsinnig ist:
var obj = function () {
this.property = value;
}
var newObj = object(obj);
Das ist auch die einzige Möglichkeit sinnvolle Vererbung in JS umzusetzten.
JS *ist* eben eien Prorotyp-basierte Sprache. Das Hantieren mit Konstruktoren und Klassen ist zwar möglich, aber umständlich und nicht wirklich nötig.
So kann man wirklich weitestgehend auf new und prototype verzichten, function und this wird man aber trotzdem zumindest für Methoden brauchen.
Ganz ohne diese geht es nicht, man braucht sie aber nicht mehr für Kontruktoren.
Der Verzicht auf prototype ist nur bedingt, du verschiebst einfach die Verwendung von prototype in die object() Funktion.
Klar, was aber ein großer Vorteil ist, weil man new und prototype dann nur noch an einer einzigen Stelle, nämlich in der Konstruktorfunktion "object" notieren muss. Ansonsten ist man für alle Zeit davon befreit.
Gruß, Don P