Hallo,
Möglicherweise verstehe ich die Prototype-Eigenschaft nicht richtig, aber nach meinem bisherigen Verständnis greift das Prototype-Objekt auf erzeugende Klasse zu.
Nein. Da es keine Klassen gibt, sondern nur Konstruktoren, ersetzen wir mal das Wort durch Konstruktur. »Das Prototyp-Objekt greift auf den erzeugenden Konstruktor zu«. Das ist nicht richtig - genau das leistet die constructor-Eigenschaft.
irgendeineFunktion.constructor === Function
irgendeineFunktion.prototype === das Prototyp-Objekt eben dieser Funktion, hat mit Function erstmal nichts zu tun, höchstens dass es mit dessen Prototyp in einer vererbenden Prototyp-Kette steht
In Deinem Beispiel würde (nach meinem Verständnis) daher die Methode "methode" dem "function" - Objekt zugeweisen.
Nein, prototype ist einfach nur eine Eigenschaft von allen Funktionsobjekten. Darin ist ein Objekt gespeichert, also eine Liste von anderen, benannten Objekten.
Instantiiert man nun die Funktion mit »new«, benutzt sie also als Konstruktor, werden alle Member dieses Prototyp-Objektes in die neue Instanz (und alle anderen schon bestehenden Instanzen) herüberkopiert (bzw. referenziert). Das ist alles.
MovieClip.prototype.methode = function () {...}
Ab hier beherrschen alle MovieClips die Methode "methode".
Genau, alle Objekten mit dem Konstruktor MovieClip.
Denn gewissermaßen ist ja K eine Instanz der Klasse "function".
Dein Obiges Beispiel funktioniert natürlich trotzdem, denn K ist als Instanz von function natürlich in der Lage, sämtliche Methoden von "function" (und somit auch "methode") auszuführen.
Ich habe aber nirgendwo den Prototyp von Function erweitert, sondern nur den Prototyp von K. Wenn ich dem Konstruktor Function irgendetwas anhänge, hat das noch längst keine Wirkung auf alle Funktionen. Function.neueMethode = function () {}; fügt eben nur diesem Konstruktor eine Methode hinzu. Will ich allen Funktionsobjekten eine Methode ankleben, muss ich über den Prototyp gehen: Function.prototype.neueMethode.
Nur können dann alle anderen von "function" abgeleiteten Objekte ebenfalls "methode" ausführen - was ja unter Umständen nicht im Sinne des Erfinders ist (weil man z.b. abhängig von der Objekt-Klasse jeweils eine unterschiedliche "methode" implementieren will).
Nein. bestimmtesFunktionsobjekt.prototype.neueMethode ist etwas anderes als bestimmtesFunktionsobjekt.constructor.prototype.neueMethode bzw., was dasselbe ist, Function.prototype.neueMethode.
Mathias