Avatar ·

Quelle est la différence entre call et apply en JavaScript ?

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.