isPrototypeOf in Javascript

8

Ich bin ein Anfänger für JavaScript und auf dem Weg zu Prototypen in JavaScript .
Wie in dem Artikel hier

Erstellen eines Prototyps
Die Standardmethode zum Erstellen eines Objektprototyps besteht darin, eine Objektkonstruktorfunktion zu verwenden:

%Vor%

Mit einer Konstruktorfunktion können Sie das neue Schlüsselwort verwenden, um neue Objekte aus demselben Prototyp zu erstellen:

%Vor%

Die Konstruktorfunktion ist der Prototyp für Ihre Personenobjekte.
Ich bin verwirrt über die obige fette Linie, die ich absolut falsch finde.

Grund:

%Vor%

Bin ich richtig, dies zu sagen, wie ich an diese Linie glaube:

  

Die Eigenschaft 'prototype' zeigt auf das Objekt, das als Prototyp zugewiesen wird       von Instanzen, die mit dieser Funktion erstellt wurden, wenn 'neu' verwendet wird.

    
Shirgill Farhan Ansari 11.01.2015, 18:11
quelle

3 Antworten

9

Ich stimme zu, dass die Terminologie falsch ist.

Die Konstruktorfunktion hat eine Eigenschaft prototype , die die Eigenschaften und Methoden in der Prototypkette definiert; aber es ist nicht selbst der Prototyp eines Objekts, es ist der Konstruktor.

isPrototypeOf wird im Konstruktor nicht aufgerufen selbst, aber auf die Prototypeigenschaft des Konstruktors.

%Vor%

myFather wäre ein instanceof person , und Sie können dies mit der folgenden Zeile testen.

%Vor%     
Alexander O'Mara 11.01.2015, 18:24
quelle
3

Was Sie sagen,

  

Die Eigenschaft 'prototype' verweist auf das Objekt, das bei Verwendung von 'new' als Prototyp der mit dieser Funktion erstellten Instanzen zugewiesen wird.

macht mir nicht viel Sinn, aber ich denke, Sie haben die richtige Idee.

Für mich zumindest,
Die Konstruktorfunktion ist der Prototyp für Ihre persönlichen Objekte.
ist falsch.

Die richtige Version wäre:
Die Konstruktorfunktion ist die Konstruktorfunktion für Ihre Personenobjekte.

Die Prototypeigenschaft Ihrer Konstruktorfunktion ist ein Objekt.

Er enthält Eigenschaften, die Objekten zugewiesen sind, die mit dieser Konstruktorfunktion instanziiert sind, zum Beispiel:

%Vor%

Richtet eine Konstruktorfunktion mit einer Prototypeigenschaft ein, die eine Eigenschaft species enthält.

Nun, wenn wir das tun:

%Vor%

joe ist ein Objekt, das aussieht wie

%Vor%

Wie Sie sehen können, wurden die Eigenschaften des Prototyps von Person() als normale Eigenschaften von Joe festgelegt.

TL; DR

Also ich denke, Sie hatten die richtige Idee.

    
theonlygusti 11.01.2015 18:23
quelle
3

Ich stimme Ihnen zu - der Satz " Die Konstruktorfunktion ist der Prototyp für Ihre Person Objekte " ist verwirrend und ungenau. Stattdessen ist dein Verständnis korrekt, obwohl ich noch mehr ausführen möchte.

Grundsätzlich gilt: Wenn Sie eine Funktion in JavaScript erstellen, wird automatisch eine Eigenschaft namens .prototype angezeigt, und der damit verknüpfte Wert ist ein Objekt. In Ihrem Fall hat die Funktion person auch diese Eigenschaft .prototype . Wenn Sie neue Instanzen von person erstellen, wird jede Instanz so eingerichtet, dass sie von dem Objekt erbt, das der person -Funktion der Eigenschaft .prototype - dem Prototyp der Instanz - zugeordnet ist. Diese Vererbung bedeutet, dass die Eigenschaftensuche für dieses Prototypobjekt delegiert ist. Der Schlüssel hier ist, dass wenn Ihre person -Instanzen eine Eigenschaft nachschlagen, sie zuerst die Eigenschaft nach sich selbst suchen, und wenn die Eigenschaft nicht gefunden wird, werden sie die Prototyp-Kette hinaufgehen.

Wenn Sie Ihr Beispiel betrachten, ist hier Folgendes richtig:

%Vor%

In Ordnungsbegriffen weiß jede Instanz einer Person, delegiere an das Objekt, das mit person.prototype assoziiert ist, wenn die Instanz keine Eigenschaft für sich selbst finden kann.

    
wmock 11.01.2015 18:24
quelle

Tags und Links