Kürzlich habe ich eine JS -Bibliothek gesehen, die von jemand anderem geschrieben wurde. Ich hatte plötzlich einige Ideen über den Prototyp und den Vererbung in JS. Ich habe einige von ihnen schon einmal gesehen, aber sie sind nicht sehr klar. Ich habe heutzutage meine Freizeit verwendet, um diesen Bereich zu verstehen, und ich habe immer noch das Gefühl, dass etwas damit stimmt. Die Idee ist nicht so organisiert, nur zum Teilen.
1.. Instanz
In JavaScript gibt es den Instanz des Operators, ein binärer Operator. Verwenden Sie die Methode Instancea Instance von a, und der Rückgabewert ist ein Booleschen
Funktion f2 () {var f = function () {} var test = new f (); console.log (testinstance von f); // true console.log ((f.prototype ==== test .__ proto __)); // true}Beide Drucke oben sind wahr. Zeigt an, dass der Test eine Instanz von F ist; Das __Proto__ -Attribut von Testerpunkten auf das Prototyp -Objekt von F, dh die Prototyp -Eigenschaft von F ist ein Objekt, und dieses Objekt ist eine Instanz von F.
2. Objekte in js
Alles ist ein Objekt in JS. Objekte werden in Funktionsobjekte und gewöhnliche Objekte unterteilt. Gemeinsame Funktionen sind tatsächlich Funktionsobjekte, wie z.
// Funktion Objekt var f = function () {} var f2 = Neue Funktion ('str', 'console.log (str)') Funktion f3 () {} // gewöhnliches Objekt var o = new Object (); var o2 = {} var o3 = new f ()Wie oben gezeigt, sind F, F2 und F3 Funktionsobjekte, und O, O2 und O3 sind gewöhnliche Objekte.
Der Unterschied zwischen einem Funktionsobjekt und einem normalen Objekt:
Alle mit der New Function () erstellten Objekte sind Funktionsobjekte F und F3, und letztendlich werden sie auch mit New Function () erstellt.
Bei der Definition eines Objekts enthält das Objekt einige vordefinierte Eigenschaften wie Prototypen und __Proto__. Das Prototyp -Attribut ist nur in Funktionsobjekten verfügbar, und __Proto__ ist für alle Objekte verfügbar. Daher kann es durch das __Proto__ -Attribut des Objekts des Objekts bestimmt werden, um festzustellen, ob ein Objekt ein Funktionsobjekt oder ein normales Objekt ist, wie z.
// Funktion Objekt var f = function () {} // gewöhnliches Objekt var o = new Object (); console.log (f.Prototype); // Object {} console.log (O.Prototype); // undefiniertAus dem obigen Punkt können wir feststellen, dass das Funktionsobjekt über ein Prototypattribut verfügt, während das Prototypobjekt gewöhnlicher Objekte undefiniert ist.
3. Prototyp -Kette
Aus dem obigen wissen wir, dass alle Objekte ein __Proto__ -Attribut haben, das auf den Prototyp -Objektprototyp des Funktionsobjekts hinweist, das es erstellt hat. Wir nennen diese Kette, die mit dem __proproto__ -Attribut eine Prototypkette angezeigt wird, z. B. die folgende Prototyp -Kette.
Das obige Bild, das als Beispiel die Person nimmt, zeigt die Prototypkette.
var person = function () {} var person1 = new Person ();1. Person ist ein Funktionsobjekt, Person1 ist eine Instanz der Person
2. Das __Proto__ -Attribut von Person1 ist das Prototyp -Objekt der Person.Prototype
3.. Da die Prototypen -Objektperson der Person ein Objekt ist, hat es auch ein __proproto__ -Attribut, das auf das Objekt -Objektobjekt -Objekt -Objekt der Objektprototyp hinweist.Prototype
4. Prototyp -Objekt des Objekts Objekt.Prototyp ist ein Objekt, das auch ein __Proto__ -Attribut aufweist, und das Prototyp -Objekt dieses Attributs ist null.
4. Einige Erbschaft
In JS werden wir ein Funktionsobjekt definieren, wie z.
var person = function () {}Oben haben wir ein Funktionsobjekt definiert, das keine Eigenschaften hat und ein leeres Objekt ist. Da es sich um ein Objekt handelt, können Sie ihm Eigenschaften hinzufügen.
var person = function () {} person.name1 = 'js'console.log (person.name1) // jsDer obige Code hat der Person ein Namensattribut hinzugefügt und JS einen Wert zugewiesen, und der Wert des Namensattributs kann ausgedruckt werden.
Aber wenn wir eine Instanz von Person erstellen11 wie folgt
var person = function () {}; Person.Name1 = 122; console.log (Person.Name1); var person1 = new Person (); console.log (Person1.Name1); // undefiniertSie können sehen, dass diese Person1 nicht über das NAME1 -Attribut verfügt. Wie können wir also sicherstellen, dass diese Person -Instanzen auch das NAME1 -Attribut haben?
var person = function () {}; Person.Name1 = 122; // Verwenden Sie das Prototyp -Objekt, um dem Objekt Attribute hinzuzufügen, damit die Instanzen diese Attributperson haben. console.log (Person.Name1); var person1 = new Person (); console.log (Person1.Name1); // 12Oben wird Person.Protoype.name1 = '12 'verwendet, so dass alle Instanzen ein Namensattribut haben. Die auf diese Weise hinzugefügten Attribute werden als gemeinsame Attribute der Instanz beim Generieren der Instanz angesehen.
Der obige Artikel basiert auf Prototypen und Vererbung in JS. Alle Inhalte, die ich mit Ihnen teile, ist der Editor. Ich hoffe, es kann Ihnen eine Referenz geben und ich hoffe, Sie können Wulin.com mehr unterstützen.