Betrachten Sie Folgendes:
%Vor% Wenn o
der Prototyp von p
ist, was ist p
in Bezug auf o
?
Ich bin mir nicht bewusst, dass es einen weit verbreiteten Konsens über einen formalen Begriff für das Objekt gibt, dessen Prototyp ein anderes Objekt ist, aber IMHO ist der Begriff abgeleitetes Objekt akzeptabel.
Der Punkt der prototypischen Vererbung ist, dass ein Objekt von einem anderen erbt oder von einem anderen abgeleitet ist. In einigen klassischen OO-Sprachen wie C ++ hören Sie den Begriff abgeleitete Klasse , weil Klassen von anderen Klassen erben. Da die Vererbung zwischen Objekten in prototypischen Sprachen stattfindet, würde ich sagen, dass "abgeleitetes Objekt" sinnvoll ist.
Hinweis: In Wirklichkeit hat jeder Prototyp eines Objekts einen Verweis auf den Konstruktor. Das ist also falsch, obwohl der Punkt über die nicht ganz direkte Beziehung gilt. Das Prototyp-Objekt kann noch ausgetauscht werden, aber der Prototyp ist tatsächlich mit dem Objekt verbunden und kann direkt mit __proto__
oder Object.getPrototypeOf(instance)
erreicht werden ( proto ist kein Standard, also ist Object.getPrototypeOf idealer falls verfügbar).
Ich denke, es ist besser zu denken, dass der Konstruktor eines Objekts einen Prototyp hat. Stellen Sie sich Object.create als eine Funktion vor, die wie folgt aussieht:
%Vor%Also im Fall von:
%Vor%o wird der Prototypeigenschaft des Konstruktors von p zugewiesen.
Überprüfen Sie dies jetzt:
%Vor%Die Verwendung des Begriffes "abgeleitet" oder irgendetwas anderes, das eine direkte Beziehung zwischen den beiden Arten von Munges behauptet, was tatsächlich passiert, weil Sie die Prototypeigenschaft des Konstruktors von p jederzeit austauschen können, indem Sie alle für alle Instanzen verfügbaren Eigenschaften ändern ps Konstruktor rückwirkend. p ist nicht von o abgeleitet. o ist, bis wir es ändern, das Sicherungsobjekt, dessen Eigenschaften untersucht werden, wenn Sie eine Eigenschaft aufrufen, die p nicht hat. Und wenn das Backup-Objekt es nicht hat, überprüft das JS-Aufrufobjekt den Prototypen des Konstruktors und so weiter die Kette.
Deshalb mag ich Object.create oder die neue Klasse der kommenden Klasse nicht persönlich. Es funktioniert alles gleich, aber wir begraben, was eigentlich für einen sehr kleinen Syntax-Zucker-Gewinn unnötig ist, der die Gewässer ein wenig mürrischer macht für Syntax, die wir leicht selbst produzieren könnten.
Was ist p in Bezug auf o?
p ist eine Instanz eines Konstruktors, der zufälligerweise o hat Prototyp zu dieser Zeit.
Dort gibt es keine direkte Beziehung. Der Versuch, einen zu behaupten, wird die Leute nur verwirren und sie werden übersehen, wie wirklich mächtig die Art und Weise ist, wie sie tatsächlich funktioniert. Sie können keine Klasse in den meisten Sprachen austauschen und alle neuen geerbten Eigenschaften können plötzlich aufrufbar sein. Sie können in JS. Das liegt daran, dass es sich eher um eine Kette von Sicherungsobjekten handelt, die nach Eigenschaften suchen, die nicht direkt auf der Instanz mit einem Vererbungsschema definiert sind.
p wäre die Prototypkette von o und o wäre die Prototypkette von p. Die Prototypkette wird verwendet, wenn ein bestimmtes Mitglied nicht direkt in der Instanz gefunden werden kann. JavaScript sucht nur in der Prototypkette nach, bis das Element gefunden wird oder nicht definiert zurückgegeben wird: Ссылка
%Vor%Tags und Links javascript object prototypal-inheritance