Quand j'ai regardé la première étape du code source jQuery, j'étais confus au sujet de la création d'objets jQuery. Après y avoir réfléchi pendant longtemps, je l'ai finalement ressenti. Ici je l'enregistre
La première méthode:
var a = function () {return a.prototype.init ();} a.prototype = {init: function () {this.age = 50; console.log (this); return this;}, âge: 100} console.log (a () === new a ());1.Analysez pourquoi le résultat est vrai
La fonction a.prototype.init () est appelée interne par a ()
New a () appellera le constructeur en interne, et son constructeur est fonction () {return a.prototype.init ();}, et le même appel est la fonction a.prototype.init ()
2.Analyse ce que la fonction a.prototype.init ()
Cela dépend de cela, déterminez à qui cela pointe. Nous devons l'analyser lors de l'appel de la fonction. Puisqu'il est appelé comme l'attribut de l'objet prototype, c'est l'objet prototype a.prototype
De cette manière de création, peu importe combien de fois vous appelez (), ils sont en fait le même objet renvoyé, de sorte que la modification de l'objet B affectera l'objet A, voir la figure ci-dessous
var a = a (); var b = a (); console.log (a.age); console.log (b.age); b.age = 22; console.log (a.age); console.log (b.age); console.log (b.age);
Alors, comment résoudre ce problème? Parlons de la deuxième méthode, qui est également la méthode utilisée par jQuery.
La deuxième façon
var a = function () {return new A.prototype.init (); // ①} a.prototype = {init: function () {this.age = 50; console.log (this); renvoie ceci;}, âge: 100}A.prototype.init.prototype = a.prototype; // ②var a = new a (); var b = new a (); console.log (a === b); console.log (a.age); console.log (b.age); b.age = 22; console.log (b.age);
Analyse de ① et ②
①in New A.prototype.Init () fait principalement trois choses
Créer un objet vide var obj = {};
OBJ Object Property_proto_ pointe vers le prototype de la fonction a.prototype.init;
Remplacez-le dans la fonction a.prototype.init par objet OBJ, appelez a.prototype.init function, a.prototype.init.call (obj), et renvoyez le nouvel objet
Parce que ① le prototype de l'objet retourné est a.prototype.init.prototype, cela n'a rien à voir avec a.prototype. Afin de rendre l'héritage de l'objet nouvellement retourné de A.Prototype, ② Soit a.prototype.init.prototype pointer vers A.Prototype
Par conséquent, la deuxième méthode consiste à créer une instance et à s'assurer que chacune de sa propre portée est indépendante.
Ce qui précède est une explication détaillée de l'exemple de construction libre de la construction libre de JavaScript qui vous est présenté par l'éditeur. J'espère que cela vous aidera. Si vous souhaitez en savoir plus d'informations, veuillez faire attention au site Web Wulin.com!