Um die Prototyp -Kette herauszufinden, müssen Sie zuerst den Funktionstyp herausfinden. Eine Klasse hat ein sehr wichtiges Merkmal, das darin besteht, dass sie Objekte damit als Vorlage basierend auf ihrem Konstruktor erstellen können. In JavaScript hat die Funktion 2 Funktionen
Erstens als allgemeiner Funktionsaufruf
Zweitens ist der Konstruktor seines Prototypobjekts neu ()
Nehmen wir ein Beispiel
Die Codekopie lautet wie folgt:
Funktion a () {
this.name = 'a';
}
Was passiert, wenn eine Funktion erstellt wird?
Erstens erstellt es ein Funktionsobjekt, dh a selbst
Zweitens erstellt es ein Prototyp -Objekt @A (bezeichnet von @)
Dritten
Viertens gibt es einen Konstruktorzeiger im @A -Objekt, der auf seinen Konstruktor zeigt, hier zeigt er auf a
http://img.blog.csdn.net/20140222125611500?watermark/2/Text/AHR0CDOVL2JSB2CUY3NKBI5UZXQVBGPSMTU3MDEX/FONT/5a6l5L2T/FONDSIZE/FONT/FONT/FONT/FONT/FONT/FONT/FONT/FONT/FONTSIZE/400/FIL L/I0JBQK. Schwerkraft/Südosten
Was nutzen dieses Prototyp -Attribut?
Tatsächlich repräsentiert das Prototyp -Attribut den Bereich, den die aktuelle Funktion steuern kann (oder es gibt an, wessen Konstruktor die aktuelle Funktion ist). .
Die Codekopie lautet wie folgt:
Funktion a () {
this.name = 'a';
}
var a1 = new a ();
Dies ähnelt anderen gemeinsamen Sprachen.
Wenn Sie die Eigenschaften des Prototyps, der auf das Objekt zeigt, alle mit ihm erstellten Instanzen beeinflussen, können wir dies überprüfen.
Die Codekopie lautet wie folgt:
Funktion a () {
this.name = 'a';
}
var a1 = new a ();
A.Prototype.age = 1;
Alarm (a1.age);
Ergebnisse: 1
Warum kann das A1 -Objekt dann direkt auf das Altersattribut zugreifen? Ich definiere das Altersattribut im A1 -Objekt nicht.
Das liegt daran
Die Codekopie lautet wie folgt:
Funktion a () {
this.name = 'a';
}
var a1 = new a ();
alert (a1._proto_ == A.Prototype)
Ergebnis: wahr
Wenn Sie auf Attribute zugreifen, suchen Sie zuerst im A1 -Objekt. Ich finde es, du wirst undefiniert zurückkehren.
Zu diesem Zeitpunkt erfolgt die Bedeutung der Prototypkette. Object.Prototyp ist der Top-Level-Prototyp. Wenn also die Eigenschaft von Object.Prototype geändert wird, wirkt sich alle Objekte aus.
Betrachten Sie ein Stück Code
Die Codekopie lautet wie folgt:
Funktion a () {
this.name = 'a';
}
Funktion b () {
this.age = 1;
}
B.Prototype = new a ();
alarm (neu B (). Name);
Wir zeigen, dass B den Prototyp von B auf eine Instanz von A verweist, und dann kann die Instanz von B auch auf die Eigenschaften von a zugreifen. Dies ist die Vererbung von JavaScript. Warum weist B.Prototypen auf eine Instanz von A hin, anstatt direkt auf A.Prototyp zu zeigen?
Die Codekopie lautet wie folgt:
B.Prototype = neuer A.Prototyp;
Wenn Sie die Eigenschaften in P.Prototype wie oben geschrieben ändern, ändert sich auch der Prototyp eines A, der der Unterklasse entspricht, die die übergeordnete Klasse ändert, und die Eigenschaften der Unterklasse und der übergeordneten Klasse werden miteinander kombiniert, was offensichtlich ist, was offensichtlich ist unangemessen. Mit anderen Worten, B wird auch zum Konstruktor von @A, und A und B werden parallele Beziehungen.
Wir können es als nächstes definieren:
Funktion A wird Funktion B, der Konstruktor ist, der Funktion A zu einer Instanz des Prototyps der Funktion b macht.
Die Codekopie lautet wie folgt:
var $ = jQuery = Funktion (Selektor, Kontext) {
// Es ist unmöglich, sich wieder in Ihrem eigenen Konstruktor zu konstruieren, daher wurde eine andere Konstruktorinstanz zurückgegeben
Neue Init zurückgeben (Selector, Kontext);
}
jQuery.fn = jQuery.Prototype = {{
Größe: function () {
Gibt diese Länge zurück;
}
}
Funktion Init (Selector, Kontext) {
}
init.Prototype = jQuery.fn ;;
}
Dies ist ein Quellcode von JQuery.
Mit dem obigen Wissen kann erklärt werden, dass JQuery nur ein Aufruf einer allgemeinen Funktion ist, die ein von einem anderer Konstruktor des JQuery -Prototyps erstellte Objekt zurückgibt, dh New init ()