56 votes

comment fonctionne le chaînage jquery ?

Je ne demande pas quelle est la syntaxe appropriée pour le chaînage, je sais que cela pourrait être quelque chose comme:

 $('myDiv').removeClass('off').addClass('on');

Cependant, je suis vraiment curieux de comprendre le fonctionnement interne de celui-ci, pour autant que je sache, le chaînage est l'un des avantages par rapport à d'autres frameworks célèbres, mais cela nous fait beaucoup d'abstraction pour un programmeur novice comme moi, je suis sûr qu'il y a quelqu'un là ça peut me fournir une explication qui me permet de comprendre comment fonctionne le chaînage.

Merci!

71voto

user113716 Points 143363

Si vous avez un objet avec certaines méthodes, si chaque méthode renvoie un objet avec des méthodes, vous pouvez simplement appeler une méthode à partir de l'objet renvoyé.

 var obj = {   // every method returns obj---------v
    first: function() { alert('first');   return obj; },
    second: function() { alert('second'); return obj; },
    third: function() { alert('third');   return obj; }
}

obj.first().second().third();

DÉMO : http://jsfiddle.net/5kkCh/

26voto

Tejs Points 23834

Tout ce qu'il fait est de renvoyer une référence à this lorsque la méthode se termine. Prenons cet objet simple par exemple :

  var sampleObj = function()
 {
 };

 sampleObj.prototype.Foo = function()
 {
     return this;
 };

Vous pourriez enchaîner ces appels toute la journée car vous renvoyez une référence à this :

 var obj = new sampleObj();
obj.Foo().Foo().Foo().Foo() // and so on

jQuery effectue simplement une opération, puis renvoie this .

7voto

Daniel A. White Points 91889

Fondamentalement, le premier appel de fonction $('myDiv') renvoie un objet jQuery, puis chaque appel suivant renvoie le même.

Librement,

 var $ = function(selector) {
   return new jQuery(selector);
};

jQuery.prototype.removeClass = function(className) {
   // magic
   return this;
}

4voto

GSto Points 13106
return $this;

chaque fonction jQuery renvoie une instance de la classe jQuery, qui peut alors avoir des méthodes appelées dessus. vous pourriez le décomposer, et ce code aurait le même effet.

 jQuery_obj = $('myDiv');
jQuery_obj = jQuery_obj.removeClass('off');
jQuery_obj = jQuery_obj.addClass('on');

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X