5 votes

JQuery $.each(arr, foo) versus $(arr).each(foo)

Dans jQuery, quelle est la différence entre les deux constructions suivantes de jQuery.each:

// Given
var arr = [1,2,3,4],
    results = [],
    foo = function (index, element) { 
       /* quelque chose fait à/avec chaque élément */
       results.push(element * element); // quelque chose d'arbitraire.
    }

// construction #1
$.each(arr, foo); // results = [1,4,9,16]

// construction #2
$(arr).each(foo); // results = [1,4,9,16]

Y a-t-il une différence, ou est-ce purement une question de syntaxe?

8voto

Nick Craver Points 313913

La $().each() n'est qu'un wrapper pour $.each(), vous pouvez voir ceci dans le code source:

each: function( callback, args ) {
    return jQuery.each( this, callback, args );
}

Cependant, bien que $(something).each() soit destiné aux éléments, je ne peux pas vous garantir que son utilisation avec un simple tableau ne causera pas de problème plus tard (il est peu probable que cela casse, puisque les objets jQuery sont des tableaux encapsulés). L'utilisation prévue est d'appeler directement $.each() dans ce cas.

1voto

RobertPitt Points 28140

Il n'y a pas de différence dans la façon dont le tableau est traité mais simplement dans la syntaxe.

jQuery est une bibliothèque très souple et vous permet de tirer parti de chaque fonction différemment pour vous convenir.

jQuery gère le "this" de cette manière

function each(first, second)
{
    array = (instanceOf this == Array) ? this : ((first instanceOf Array) ? first : second);
    callback = (instanceOf second == Function) ? second : first;
    //Comme vous pouvez le voir, il teste les types de données envoyés à la fonction
}

si l'argument first est une fonction alors this doit être le tableau, par exemple $([1,2,3,4]).each(callback), sinon on s'attend à ce que first soit le tableau et second le callback, par exemple `$.each(array, callback);

mais de toute façon le processus est à peu près le même, juste la vérification des types d'arguments aide un utilisateur à être souple sur la manière de gérer la situation.

Même si ce n'est pas la façon dont chaque élément est réellement traité, il y a quelques fonctions qui utilisent cette technique pour créer de la souplesse

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