Bonjour, collègues ! J'ai commencé à étudier JavaScript et je suis tombé sur les méthodes call et apply. J'ai lu la documentation, mais je n'ai pas bien compris leur différence. J'ai, disons, un objet :
```javascript
const user = {
name: 'Ivan',
greet: function(greeting, punctuation) {
console.log(`${greeting}, ${this.name}${punctuation}`);
}
};
const admin = {
name: 'Petr'
};
```
Je veux appeler la méthode `greet` au nom de l'objet `admin`. D'après ce que je comprends, les deux méthodes permettent de définir `this`. Mais quand j'essaie :
```javascript
user.greet.call(admin, 'Bonjour', '!'); // fonctionne
user.greet.apply(admin, ['Bonjour', '!']); // fonctionne aussi
```
La différence est-elle seulement que `apply` prend un tableau d'arguments ? Ou y a-t-il d'autres nuances ? Peut-être que cela affecte les performances ? Ou y a-t-il des cas où une méthode est meilleure que l'autre ? Je serais reconnaissant pour une explication détaillée avec des exemples.
<<
>>
Différence principale : la forme de passage des arguments
Vous avez tout à fait raison. La différence clé est que `apply` accepte un tableau d'arguments, tandis que `call` les accepte comme une liste séparée par des virgules. En termes de performances, `call` peut être légèrement plus rapide dans certains moteurs, mais la différence est généralement négligeable. Utilisez `apply` lorsque vous avez déjà un tableau d'arguments, et `call` lorsque vous connaissez le nombre d'arguments à l'avance.