Comprendre la différence entre « appeler » et « appliquer » en JavaScript

Comprendre la différence entre « appeler » et « appliquer » en JavaScript
JavaScript

Méthodes d'invocation de fonctions en JavaScript

JavaScript propose plusieurs façons d'invoquer des fonctions, dont deux sont `Function.prototype.call()` et `Function.prototype.apply()`. Les deux méthodes servent à appeler des fonctions avec une valeur « this » et des arguments spécifiés, mais elles diffèrent dans la manière dont ces arguments sont transmis.

Cet article vise à explorer les différences entre « call » et « apply », leurs implications en termes de performances et les scénarios dans lesquels l'un pourrait être préféré à l'autre. À la fin, vous comprendrez mieux quand utiliser « call » ou « apply » dans votre code JavaScript.

Explorer les différences entre « appeler » et « appliquer » en JavaScript

Exemple d'interface JavaScript

// Example of Function.prototype.call()
const person = {
  fullName: function() {
    return this.firstName + " " + this.lastName;
  }
};

const person1 = {
  firstName: "John",
  lastName: "Doe"
};

console.log(person.fullName.call(person1)); // John Doe

Comprendre les performances de « appeler » par rapport à « appliquer » en JavaScript

Exemple d'interface JavaScript

// Example of Function.prototype.apply()
const person = {
  fullName: function(city, country) {
    return this.firstName + " " + this.lastName + ", " + city + ", " + country;
  }
};

const person2 = {
  firstName: "Jane",
  lastName: "Doe"
};

console.log(person.fullName.apply(person2, ["Oslo", "Norway"])); // Jane Doe, Oslo, Norway

Comparaison de « call » et « apply » pour l'invocation de fonction en JavaScript

Exemple de back-end Node.js

const person = {
  fullName: function(city, country) {
    return this.firstName + " " + this.lastName + ", " + city + ", " + country;
  }
};

const person3 = {
  firstName: "Alice",
  lastName: "Smith"
};

function printName(method) {
  if (method === 'call') {
    console.log(person.fullName.call(person3, 'Paris', 'France'));
  } else if (method === 'apply') {
    console.log(person.fullName.apply(person3, ['Paris', 'France']));
  }
}

printName('call');  // Alice Smith, Paris, France
printName('apply'); // Alice Smith, Paris, France

Choisir entre « appeler » et « appliquer » dans le développement JavaScript

Analyse des performances JavaScript

const iterations = 1000000;
const person = {
  fullName: function(city, country) {
    return this.firstName + " " + this.lastName + ", " + city + ", " + country;
  }
};
const person4 = {
  firstName: "Bob",
  lastName: "Brown"
};

console.time('call');
for (let i = 0; i < iterations; i++) {
  person.fullName.call(person4, 'Berlin', 'Germany');
}
console.timeEnd('call');

console.time('apply');
for (let i = 0; i < iterations; i++) {
  person.fullName.apply(person4, ['Berlin', 'Germany']);
}
console.timeEnd('apply');

Un aperçu plus approfondi des méthodes d'appel et d'application en JavaScript

En plus de leur utilisation de base, Function.prototype.call() et Function.prototype.apply() disposent de plusieurs cas d'utilisation avancés qui peuvent améliorer votre programmation JavaScript. L’un de ces cas d’utilisation est l’emprunt de méthodes, où les méthodes d’un objet sont empruntées par un autre. Ceci est particulièrement utile lorsque vous avez un objet qui doit utiliser une méthode d'un autre objet sans héritage. En utilisant call() et apply(), vous pouvez temporairement emprunter des méthodes et les exécuter dans le contexte de différents objets, améliorant ainsi la réutilisabilité du code et réduisant la redondance.

Un autre aspect important à considérer est l’utilisation de apply() pour les fonctions variadiques : fonctions qui acceptent un nombre variable d'arguments. Lorsque vous disposez d'un tableau d'arguments et que vous devez les transmettre à une fonction qui n'accepte pas de tableau, apply() devient extrêmement pratique. D'autre part, call() peut être utile dans les scénarios où les performances sont critiques et où le nombre d’arguments est connu et fixe. En comprenant ces nuances, les développeurs peuvent prendre des décisions plus éclairées sur le moment d'utiliser call() contre apply(), optimisant leur code à la fois en termes de lisibilité et de performances.

Foire aux questions sur l'appel et la candidature en JavaScript

  1. Quelle est la principale différence entre call() et apply()?
  2. call() accepte les arguments individuellement, tandis que apply() accepte les arguments sous forme de tableau.
  3. Peut call() et apply() être utilisé de manière interchangeable ?
  4. Oui, ils peuvent arriver au même résultat, mais le choix dépend de la manière dont les arguments sont structurés.
  5. Quand devrais-je préférer apply() sur call()?
  6. Utiliser apply() lorsque vous disposez d'un tableau d'arguments ou d'un nombre variable d'arguments.
  7. Y a-t-il une différence de performances entre call() et apply()?
  8. Les différences de performances sont négligeables dans la plupart des cas, mais call() peut être légèrement plus rapide avec un nombre fixe d'arguments.
  9. Comment faire call() et apply() gérer le this contexte?
  10. Les deux méthodes définissent explicitement le this contexte pour l’invocation de la fonction.
  11. Puis-je utiliser call() et apply() avec des fonctions constructeur ?
  12. Non, ils ne conviennent pas aux fonctions constructeur car ils ne créent pas de nouvelles instances.
  13. Quels sont quelques cas d'utilisation avancés pour call() et apply()?
  14. Ils sont utiles pour l’emprunt de méthodes et la gestion de fonctions variadiques.
  15. Comment call() améliorer la lisibilité du code ?
  16. call() rend l'invocation de fonction plus claire lorsque le nombre d'arguments est connu et corrigé.
  17. Peut apply() gérer un nombre inconnu d'arguments ?
  18. Oui, apply() est idéal pour les fonctions qui doivent gérer un nombre variable d'arguments.

Réflexions finales sur les méthodes d'invocation de fonctions

En conclusion, les deux call et apply les méthodes sont des outils puissants en JavaScript pour appeler des fonctions avec un this valeur. Le choix entre eux dépend en grande partie de la manière dont vous souhaitez transmettre les arguments à la fonction. Alors que call est préférable lorsqu'il s'agit de traiter un nombre fixe d'arguments, apply brille lors de la manipulation de tableaux ou d'un nombre inconnu d'arguments. Comprendre ces nuances aide à écrire un code plus efficace et plus lisible, conduisant finalement à de meilleures pratiques de programmation JavaScript.