221 votes

Explication de []. slice.call en javascript ?

J’ai trébuché sur ce raccourci soigné pour convertir un NodeList DOM dans un tableau ordinaire, mais je dois admettre, je ne comprends pas complètement comment cela fonctionne :

Alors il commence par un tableau vide , puis est utilisé pour convertir le résultat de `` à un nouveau Oui tableau ?

Le peu que je ne comprends pas est le . Comment fonctionne ce convert d’un NodeList pour un tableau ordinaire ?

167voto

Max Shawabkeh Points 19030

Ce qui se passe ici est que vous appelez slice() comme si c'était une fonction d' NodeList l'aide call(). Ce slice() dans ce cas est de créer un tableau vide, puis itérer sur l'objet, il est en cours d'exécution sur (à l'origine d'un tableau, maintenant un NodeList) et gardez-le en ajoutant les éléments de l'objet pour le tableau vide, elle a créé, qui est finalement retourné. Voici un article sur ce.

EDIT:

Donc ça commence avec un tableau vide [], puis tranche est utilisée pour convertir le résultat de l'appel à un nouvel ensemble, ouais?

Ce n'est pas juste. [].slice renvoie un objet de fonction. Une fonction de l'objet a une fonction call() qui appelle la fonction d'assigner le premier paramètre de la call() de this; en d'autres termes, faire de la fonction de penser qu'il est appelé à partir du paramètre ( NodeList retournée par document.querySelectorAll('a')) plutôt qu'à partir d'un tableau.

138voto

slebetman Points 28276

En javascript, les méthodes d'un objet peut être lié à un autre objet lors de l'exécution. En bref, javascript permet à un objet "d'emprunter" la méthode d'un autre objet:

object1 = {
    name:'frank',
    greet:function(){
        alert('hello '+this.name)
    }
};

object2 = {
    name:'andy'
};

// Note that object2 has no greet method.
// But we may "borrow" from object1:

object1.greet.call(object2);

L' call et apply méthodes de la fonction des objets (en javascript les fonctions sont des objets, ainsi) vous permet de le faire. Donc, dans votre code, vous pourriez dire que la Nodelist est emprunt d'un tableau de tranche du la méthode. Ce qui fait la conversion est le fait que la tranche renvoie un autre tableau, comme c'est le résultat.

32voto

Brian Campbell Points 101107

Il récupère le fonction d’un . Il puis les appels qui fonctionnent, mais en utilisant le résultat de comme le objet plutôt qu’un tableau réel.

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