Maison  >  Article  >  interface Web  >  Comprendre la méthode apply en javascript

Comprendre la méthode apply en javascript

PHPz
PHPzoriginal
2023-04-25 09:15:43916parcourir

En JavaScript, la méthode apply() est une méthode très utile. Il peut être utilisé pour appeler une fonction et définir cette valeur et ses paramètres. Cet article écrira manuellement une méthode apply() pour mieux comprendre son fonctionnement.

Tout d'abord, comprenons la syntaxe de la méthode apply(). Il prend deux paramètres : le premier paramètre est la fonction à appeler et le deuxième paramètre est un tableau ou un objet de type tableau contenant les paramètres à transmettre à la fonction. Comme indiqué ci-dessous :

function myFunc(arg1, arg2) {
  console.log(this.name + arg1 + arg2);
}

const obj = {name: 'John'};
const args = [1, 2];

myFunc.apply(obj, args);
// 输出:John12

Dans l'exemple ci-dessus, nous avons utilisé la méthode apply() pour appeler la fonction myFunc(). Nous définissons cette valeur sur obj et stockons la liste d'arguments dans le tableau args. La sortie de la fonction myFunc() est le résultat de l’ajout de l’attribut name de obj aux deux paramètres.

Maintenant, écrivons manuellement une méthode apply(). Nous pouvons le faire en créant une fonction appelée myApply(), qui simule la fonctionnalité spécifique de la méthode apply(). Pour simuler la méthode apply(), nous devrons d'abord vérifier si la fonction donnée existe et nous assurer que le deuxième paramètre est un tableau ou un objet de type tableau et que la longueur de l'objet n'est pas nulle. Ci-dessous le code de la fonction myApply() :

Function.prototype.myApply = function(context, args) {
  if (typeof this !== 'function') {
    throw new TypeError('The current object is not a function.');
  }

  if (!Array.isArray(args) && !((args.length !== null) && (args !== ''))) {
    throw new TypeError('The second argument is not an array or array-like object.');
  }

  const fn = Symbol('fn');
  context = context || window;
  context[fn] = this;

  const result = context[fn](...args);
  delete context[fn];

  return result;
}

Dans le code ci-dessus, nous vérifions d'abord si la fonction à appeler existe et renvoyons une erreur de type si elle n'existe pas. Ensuite, nous vérifions si le deuxième paramètre est un tableau ou un objet de type tableau, et sinon, une erreur de type sera générée. Si les deux arguments sont valides, nous créons un symbole unique en tant que propriété temporaire de l'objet contextuel, lions la fonction à l'objet contextuel, l'appelons en passant l'argument args et stockons le résultat dans la variable de résultat. Enfin, nous supprimons cette propriété temporaire de l'objet contextuel et renvoyons le résultat.

Ensuite, nous pouvons utiliser la fonction myApply() pour appeler la fonction comme indiqué dans le code suivant :

function myFunc(arg1, arg2) {
  console.log(this.name + arg1 + arg2);
}

const obj = {name: 'John'};
const args = [1, 2];

myFunc.myApply(obj, args);
// 输出:John12

Dans cet exemple, nous utilisons la méthode myApply() pour appeler la fonction myFunc(). Nous définissons cette valeur sur obj et stockons la liste d'arguments dans le tableau args. La sortie de la fonction myFunc() est le résultat de l’ajout de l’attribut name de obj aux deux paramètres.

Dans cet article, nous avons écrit manuellement une méthode apply() et l'avons utilisée pour appeler une fonction. Nous avons vu comment vérifier si une fonction existe et comment éviter de transmettre des arguments illégaux. Avec cet exemple, vous devriez pouvoir mieux comprendre le fonctionnement de la méthode apply() et les étapes nécessaires pour l'écrire à la main.

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