Als ich mir den ersten Schritt des JQuery -Quellcodes ansah, war ich verwirrt über die Erstellung von JQuery -Objekten. Nachdem ich lange darüber nachgedacht hatte, fühlte ich es endlich. Hier nehme ich es auf
Die erste Methode:
var a = function () {return a.prototype.init ();} A.Prototype = {init: function () {this.age = 50; console.log (this); reta this;}, Alter: 100} console.log (a () === new a ());1.Analyzieren Sie, warum das Ergebnis wahr ist
Die Funktion von A.Prototype.init () wird intern von a () bezeichnet
New a () ruft den Konstruktor intern auf und sein Konstruktor ist function () {return a.prototype.init ();}, und derselbe Aufruf ist die Funktion von A.Prototype.init ()
2.Analyse, was die Funktion von A.Prototype.init () zurückgibt
Es hängt davon ab, auf wen dies zeigt. Wir müssen es beim Aufrufen der Funktion analysieren. Da es als Attribut des Prototyp -Objekts bezeichnet wird, ist dies das Prototypobjekt A.Prototype
Auf diese Weise der Schöpfung, egal wie oft Sie a () aufrufen, sind sie tatsächlich das gleiche zurückgegebene Objekt, sodass die Änderung des Objekts B das Objekt A beeinflusst, siehe Abbildung unten
var a = a (); var b = a (); console.log (A.age); Konsole.log (B.age); B.age = 22; console.log (A.age); Konsole.Log (B.age); Konsole.log (B.age);
Wie kann man dieses Problem lösen? Sprechen wir über die zweite Methode, die auch die von JQuery verwendete Methode ist.
Der zweite Weg
var a = function () {return New A.Prototype.init (); // ①} A.Prototype = {init: function () {this.age = 50; console.log (this);A.Prototype.init.Prototyp = A.Prototyp; // ②var a = new a (); var b = new a (); Konsole.Log (a === b) trsole.log (a.age) console.log (b.age); b.age = 22; console.log (a.age); console.log (log (b.age); console.log (log (b.age); console (log); console.log (log (b.age); console (log); console.log (log (b.age); console.log (log (log); console.log (log (log); console.log (log (log); console.log (log (b.age); console.log (log (log); console.log (logog (log);
Analyse von ① und ②
①In New A.Prototype.init () macht hauptsächlich drei Dinge
Erstellen Sie ein leeres Objekt var obj = {};
OBJ Object Properation_Proto_ zeigt auf den Prototyp der Funktion a.prototype.init;
Ersetzen Sie dies in A.Prototype.init -Funktion durch OBJ -Objekt, rufen Sie A.Prototype.init -Funktion, A.Prototype.init.call (OBJ) auf und geben Sie das neue Objekt zurück
Da ① der Prototyp des zurückgegebenen Objekts A.Prototype.init.Prototyp ist, hat er nichts mit A.Prototyp zu tun. Um das neu zurückgegebene Objekt von A.Prototype zu erben
Daher besteht die zweite Methode darin, eine Instanz zu erstellen und sicherzustellen, dass jeder eigener Umfang unabhängig ist.
Das obige ist eine detaillierte Erläuterung des neuen freien Konstruktionsbeispiels von JavaScript, das Ihnen vom Herausgeber vorgestellt wurde. Ich hoffe es wird dir helfen. Wenn Sie weitere Informationen wissen möchten, achten Sie bitte auf die Website wulin.com!