bitte entschuldige die lange wartezeit - ich bin gerade vielbeschaeftigt.
Waaaas? Nein, wenn dann muss ich mich entschuldigen, dass ich dich mit meinen Anfänger-Fragen von der Arbeit abhalte! :)
Ja, für mich steht ein Konstruktor als synonym für eine klasse.
trenn Dich im kontext von JavaScript von dieser *denke*.
Wie könnte ich sonst Konkrete Objekte (per "new") erzeugen ohne
eine art "Klasse". :)auch in klassenbasierte oo benoetigst Du dazu nur den konstruktor
Nach ein bisschen vertiefung und nach 4 Videos von Douglas Crockford, beginnt sich bei mir eine Art Gefühl für JavaScript zu entwickeln :)
...Das kam weil ich die Bedeutung des Call-Operators mit der call()-
methode verwechselt hatte, welche ja ein neues objekt "konstruiert",
wobei der operator nur "aufruft" ...noe ... call-operator »()« und die call methoden »apply« und »call«
haben grundsaetzlich erstmal die gleiche aufgabe, naemlich ein
funktionsobjekt auszufuehren. ueber die beiden call-methoden lassen
sich ausserdem noch auf unterschiedlich flexible weise argumente an
eine funktion verbacken. darueber hinaus, und das ist der bei weitem
wichtigste aspekt, laesst sich der kontext, in welchem eine methode
ausgefuehrt werden soll, manipulieren.
Ja, das ist mir jetzt bewußt...
ja. statt des emulierten »super()« liesse sich eine [[SuperCat]]-
instanz zum prototypen eines [[SubCat]]-konstruktors bestimmen:
var SuperCat = (function () {
this.sound = "miaow";
});var SubCat = (function () {
alert("this.constructor : " + this.constructor); // [[SuperCat]]
this.constructor = arguments.callee; // [prototype]-referenz ueberschreiben
alert("this.constructor : " + this.constructor); // [[SubCat]]
this.sound ="meow";
this.makeSound = (function () {
alert("the cat says "" + this.sound + """);
});
this.makeProtoSound = (function () { // makeSuperSoundalert("the cat says "" + this.constructor.prototype.sound + """);
});
});
SubCat.prototype = new SuperCat();var felixcat = new SubCat();
felixcat.makeSound(); // "meow"
felixcat.makeProtoSound(); // "miaow"
>
Das Beispiel gefällt mir am Besten! So ähnlich hatte ich das auch vermutet :) Ich hatte allerdings im Web gesehen, dass man arguments.callee nur für namenlose Funktionen benutzt und es seit 1.4 als depreciated gilt. Da constructor doch ein member des SubCat Konstruktors an sich ist, kann ich doch schreiben "this.constructor = SubCat; // [prototype]-referenz", oder? Damit resette ich ihn wieder auf SubCat.
> > Danke für deine Mühe Peter!
>
> nicht dafuer.
>
Wofür sonst? :) Nochmals danke :)
so long - felix