Ich kenne Javascript seit einiger Zeit, obwohl ich kein schwerer Benutzer bin, kenne ich es zum ersten Mal aus der Zeit, als Netscape mein Browser war. Ich verstehe die wichtigsten Dinge ziemlich genau, aber da der JavaScript-Ansatz für OOP prototypisch ist, habe ich einige Probleme, ihn zu verstehen.
Ein Problem, das noch hinzugefügt werden muss, scheint, dass Dinge auf mehr als eine Weise erledigt werden können, und hier helfen Bücher nicht viel, weil sie alle Beispiele auf den Tisch legen, was es schwierig macht, das Tempo zu halten.
Was ich zum Starten brauche, ist nur eine Möglichkeit, wenn mir jemand mit dem einfachsten Code helfen kann, ein Beispiel, in dem ich sehen kann, wie das prototypische OOP-Modell funktioniert?
Um hilfreich zu sein, sollte der Code ein geerbtes Objekt haben, auf die Eigenschaft eines Elternteils und seine geerbten Eigenschaften sowie auf die Funktion eines Elternteils zugreifen, die Funktion eines Elternteils überschreiben und eine Instanz einer Mehrfachvererbung haben, bei der ein Objekt zwei andere Objekte erbt.
quelle
Antworten:
Siehe auch:
quelle
Der urkomische Experte @venkat_s teilt eine Analogie, um die prototypische Vererbung zu erfassen.
Hier ist ein Beispiel seines Humors: "Das Besondere an JavaScript ist, dass es Sie nicht anschreit. Es ist Ihr Freund. Es sagt Ihnen nicht, wenn etwas nicht stimmt, es funktioniert einfach nicht mehr. Rufen Sie nicht mehr an."
Zur Vererbung fuhr er fort: "Der Prototyp ist wie ein Rucksack - für das Objekt. Für alles in JavaScript, was ein Objekt ist, hat er einen Rucksack, und Sie können Sachen hineinstecken. Und alle Ihre Objekte können darauf zugreifen."
Ich hoffe, das hilft.
quelle
Code vergessen. Die einfachste Erklärung.
Funktionskonstruktoren erstellen Objekte. In JS sind Funktionen selbst Objekte, die Eigenschaften haben können. Jede Funktion verfügt über eine Prototyp-Eigenschaft, die jedes Objekt enthalten kann. Sie können jeden Konstruktorprototyp einfach im laufenden Betrieb einstellen. Wenn Sie beispielsweise Arrays ruinieren möchten,
Das Prototypobjekt ist im Grunde ein Fallback, der von Instanzen überprüft wird, wenn Sie versuchen, auf eine Eigenschaft zu verweisen, die sie nicht haben. Wenn das Prototypobjekt nicht über diese Methode verfügt, wird das Prototypobjekt des Konstruktors auf die Methode überprüft. Das ist die Kette, der gefolgt wird.
Es geht also nicht wirklich um Vererbung. Es geht darum: "Oh, das hast du nicht, nun, hat deine Mutter es in ihrer Prototypentasche? Nein? Wie wäre es mit ihrer Großmutter? Nein? Wie wäre es dann ... bis wir zu Eva kommen, oder dem Prototyp des Objektkonstruktors, der Hier hört das Geld immer auf.
Es ist also nicht so, dass Ihre Instanzen das Material im Prototyp aufnehmen oder behalten. Wenn JavaScript eine Methode eines Objekts aufruft, gibt es nur einen Fallback-Prozess, um die Kette object-> constructor.prototype zu überprüfen, um festzustellen, ob die unbekannte Methode gefunden werden kann. Wenn Sie einen Konstruktorprototyp ändern, "erhalten" alle vorhandenen Instanzen diese Methode. Sie bekommen überhaupt nichts. Es ist ihre Fallback-Gruppe von Objekten für die Suche, die die neue Methode erhält.
quelle