JavaScript stützt sich auf die Eigenschaften vieler Sprachen; Zum Beispiel Syntax -Java, Funktionen auf Schema, Prototyp -Vererbung zeichnen sich aus Selbst und regelmäßiger Ausdruck aus Perl. (DC JavaScript: Sprachessenz).
Erstens ist jedes JS eine objektorientierte Sprache, die auf Prototyper-Vererbung basiert. Das Array im Inneren ist ein Objekt, die Funktion ist ein Objekt und natürlich ist das "Objekt" immer noch ein Objekt. Darüber hinaus verfügt jedes Objekt über einen internen Steckplatz [[[Prototyp]], der der Schlüssel zum Anschließen der Prototypkette ist. Zugegeben, wir können eine Prototyp -Eigenschaft für ein Objekt festlegen, aber na und? Dies ist nur eine Manifestation; dahinter steckt eine versteckte mörderische Absicht.
OK, dann kann ich iSprototypeof () verwenden, um zu überprüfen, ob ein Objekt ein Prototyp eines anderen Objekts ist. Dies basiert jedoch auch auf der Kette [[[Prototyp]].
Zum Beispiel:
// Erstellen Sie eine Funktionsfunktion foo () {} // Die Prototyp -Eigenschaft der Funktion ändern foo.prototype = {name: "foo.prototype"}; // eine Instanz erstellen var a = new foo (); // Schreiben Sie den Standardprototyp von A neu, der foo.prototypen hätte sein müssen. A.Prototype = {Name: "A.Prototyp"};Die folgende Frage ist, ob foo.Prototyp der Prototyp von A ist? !
Dies muss separat angezeigt werden: Einerseits ist A.Prototype in der Tat {Name: "A.Prototyp"}; Foo.Prototype.riprototypeof (a) ist jedoch wahr.
Schauen wir uns die spezifische Beziehung an: (Verwenden Sie ---> eine unbedeutende [[Prototyp]] Kette, ---- bedeutet eine Prototyp-Eigenschaftsbeziehung)
Funktion ---> Funktion.Prototyp ---> Object.Prototype
Funktion.Prototyp <--- foo ---- foo.prototype ------> Object.Prototype.
Zusätzlich ist [[protepType]] von Anzahl, boolean, String usw. immer noch eine Funktion. Prototyp -Objekt. Das Objekt der Funktion.Prototyp ist "Funktion" und enthält nicht [[Konstrukt]] im Inneren, sodass es nicht als Konstruktor verwendet werden kann. Tatsächlich ist Function.Prototype ähnlich: function () {}. Zusätzlich zu [[Prototyp]] internem Steckplatz hat der Typ "Funktion" auch ein Prototypattribut. Jede Funktion hat immer ein Prototypobjekt: this.Prototype = {Konstruktor: this} (ein normales Objekt). Der [[[Prototyp]] dieses normalen Objekts ist mit dem Objekt verbunden.
Ist der [[[Prototyp]] des vom Konstruktors erstellten Instanzobjekts ein Objekt.Prototyp?
Der [[[[[[[Prototyp)]] dieser Instanz wird durch die Prototyp -Eigenschaft des Konstruktors initialisiert. Beachten Sie, dass es nicht der [[Prototyp]] der Funktion ist. Wenn es sich also um ein von der Objektfunktion konstruiertes Objekt handelt, dann ist es tatsächlich.
Objekt ist eine Funktion, sein Prototyp ist das berühmte Objekt. Bitte siehe unten:
Objekt ------> Funktion.Prototyp -------> Object.Prototype.
Wie ändere ich diese Kette [Prototyp]?
Es kann in Form von var a = Object.create (OBJ) oder Objekt sein. Ich glaube nicht, dass es keine Notwendigkeit gibt, Beispiele zu geben, weil die Beziehung sehr einfach ist. Lassen Sie uns nur einige beschissene Beispiele geben. Kein Sinn.
Die letzte Frage ist, dass die Verhaltensdelegation auf der Kette [[Prototyp]] basiert?
Ja, das ist der Fall.