Maison  >  Article  >  interface Web  >  Explication détaillée de la façon d'utiliser la méthode d'application de fonction en Javascript

Explication détaillée de la façon d'utiliser la méthode d'application de fonction en Javascript

伊谢尔伦
伊谢尔伦original
2017-07-20 14:10:092261parcourir

Function.prototype.apply()

La méthode apply est similaire à la méthode call Elle change également le point de ceci (la portée où la fonction est exécutée. ), puis dans Appeler cette fonction dans la portée spécifiée. La fonction sera également exécutée immédiatement. La seule différence est qu'il reçoit un tableau en paramètre lors de l'exécution de la fonction.

Le premier paramètre de la méthode apply est également l'objet vers lequel cela pointe. S'il est défini sur null ou undefined ou this, cela équivaut à spécifier l'objet global. Le deuxième paramètre est un tableau, et tous les membres du tableau sont utilisés tour à tour comme paramètres et transmis à la fonction d'origine lors de l'appel. Les paramètres de la fonction d'origine doivent être ajoutés un par un dans la méthode call, mais dans la méthode apply, ils doivent être ajoutés sous forme de tableau.

Regardez les nuances de l'appel et postulez.


function keith(a, b) {
 console.log(a + b);
 }
 keith.call(null, 2, 3); //5
 keith.apply(null, [2, 3]); //5

Dans le code ci-dessus, le premier paramètre est nul, pointant vers la portée globale ; le deuxième paramètre est passé sous une forme légèrement différente.

La méthode d'application a les applications suivantes.

3.1 : Trouver le nombre maximum dans un tableau


var a = [2, 4, 5, 7, 8, 10];
console.log(Math.max.apply(null, a)); //10
console.log(Math.max.call(null,2, 4, 5, 7, 8, 10)); //10 

Javascript ne permet pas de trouver le nombre maximum dans une méthode tableau, combinée aux méthodes apply et Math.max héritées de Function.prototype, vous pouvez renvoyer la valeur maximale du tableau.

3.2 : Changez l'élément vide du tableau en non défini

Utilisez la méthode apply pour utiliser le constructeur Array pour changer l'élément vide du tableau en non défini.

console.log(Array.apply(null, [1, , 3])); // [1, undefined, 3]

La différence entre les éléments vides et indéfinis est que la méthode forEach du tableau ignorera les éléments vides, mais n'ignorera pas les éléments indéfinis et nuls. Par conséquent, en parcourant les éléments internes, vous obtiendrez des résultats différents.


var a = [1, , 3];
 a.forEach(function(index) {
 console.log(index); //1,3 ,跳过了空元素。
 })
 Array.apply(null,a).forEach(function(index){
 console.log(index); ////1,undefined,3 ,将空元素设置为undefined
 })

3.3 : Convertir un objet de type tableau

De plus, en utilisant la méthode slice de l'objet tableau, vous pouvez convertir un objet comme si les objets Array (tels que les objets arguments) étaient convertis en tableaux réels. Bien entendu, une application importante de la méthode slice consiste à convertir des objets de type tableau en tableaux réels. Call et apply peuvent tous deux implémenter cette application.


console.log(Array.prototype.slice.apply({0:1,length:1})); //[1]
console.log(Array.prototype.slice.call({0:1,length:1})); //[1]
console.log(Array.prototype.slice.apply({0:1,length:2})); //[1,undefined]
console.log(Array.prototype.slice.call({0:1,length:2})); //[1,undefined]
function keith(a,b,c){
 return arguments;
 }
console.log(Array.prototype.slice.call(keith(2,3,4))); //[2,3,4]

Les paramètres des méthodes d'appel et d'application dans le code ci-dessus sont tous des objets, mais les résultats renvoyés sont tous des tableaux, ce qui sert à convertir les objets en tableaux. Comme vous pouvez le voir dans le code ci-dessus, le principe du fonctionnement de cette méthode est que l'objet en cours de traitement doit avoir un attribut de longueur et une clé numérique correspondante.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn