46 votes

Quelle est l'utilisation de Array.prototype.slice.call (array, 0)?

Je viens de navigation Grésillement du code source et je suis tombé sur cette ligne de code:

array = Array.prototype.slice.call( array, 0 );

J'ai regardé ce que la fonction est, mais j'en suis venu à la conclusion qu'elle retourne tous les éléments de la matrice à partir de l'indice 0, et met l'ensemble dans le tableau, c'est à dire qu'il n'a pas vraiment faire quoi que ce soit.

Quel est donc l'utilisation de cette ligne de code? Ce qui me manque?

Edit: C'est la ligne à partir de 863 https://github.com/jquery/sizzle/blob/master/sizzle.js#L863.

75voto

Anurag Points 66470

Le DOM retourne habituellement une NodeList pour la plupart des opérations comme l' getElementsByTagName.

Bien qu'un NodeList se sent presque comme un tableau, il ne l'est pas. Il a un length de la propriété comme un tableau, et une méthode item(index) d'accéder à un objet à l'index donné (également accessible avec l' [index] de la notation), mais la ressemblance s'arrête là.

Donc, pour être en mesure d'utiliser les merveilleux méthodes de tableau sans avoir à réécrire tous pour un NodeList, la ligne ci-dessus est utile.

Une autre utilisation de la convertissant en un tableau est de faire la liste statique. Élément nodelists sont généralement en direct, ce qui signifie que si le document changements se produisent, la NodeList objet est automatiquement mis à jour. Que pourrait causer des problèmes si un objet jQuery retourné en changeant juste sous votre nez. Essayez ce qui suit extrait de code pour tester le liveness de l'élément nodelists.

var p = document.getElementsByTagName('p');
console.log(p.length); // 2
document.body.appendChild(document.createElement('p'));
// length of p changes as document was modified
console.log(p.length); // 3

10voto

James Sulak Points 9959

Ce qui se passe ici est que le Grésillement est la création d'un véritable réseau d'un tableau comme objet. Le tableau-comme l'objet n'est pas nécessairement la méthode slice (), de sorte que le prototype de la méthode doit être appelée directement. makeArray() renvoie une copie de ce tableau, comme objet qui est un tableau réel, et peut être utilisé en tant que tel autre endroit.

Voir ici pour plus d'informations sur le tableau-comme des objets.

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