IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Javascript - Méthode call() et apply() [Débutant(e)]


Sujet :

JavaScript

  1. #1
    Membre régulier
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juillet 2015
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Juillet 2015
    Messages : 62
    Points : 82
    Points
    82
    Par défaut Javascript - Méthode call() et apply()
    Bonjour à tous.

    En me formant sur JavaScript je suis tombé sur les méthodes call et apply dans le cadre de la modification de contexte d'une méthode.

    J'ai vu que call servait également pour l'héritage en prenant en charge l'affectation des valeurs du constructeur de l'élément enfant vers le constructeur de l'élément parent.

    Cependant je ne comprend pas dans quel contexte l'occasion d'utiliser ces méthodes peut être nécessaire.

    Avez vous des exemples d'utilisation ou des explications qui me permettrait de comprendre ces deux méthodes ?

    En vous remerciant

  2. #2
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Points : 9 944
    Points
    9 944
    Par défaut
    C'est plus simple que ça. fn.call et fn.apply permettent d'appeler la fonction fn en changeant son contexte d'appel, c'est-à-dire la valeur du mot-clé this, ce sur quoi la fonction s'applique.

    Par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [1,2,3].concat.call([4,5,6], [7,8,9]);
    retournera [4, 5, 6, 7, 8, 9]. On prend la fonction concat de l'objet Array [1,2,3], mais on l'applique sur [4,5,6] avec l'argument [7,8,9]. Donc [1,2,3] a juste servi ici à récupérer la fonction depuis son prototype. Ici ça ne sert à rien vu qu'on aurait pu aussi la récupérer depuis [4,5,6], mais si par exemple tu veux appliquer la fonction concat sur un objet qui n'est pas tout à fait un Array, comme une liste d'arguments par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    function inverseArguments(){ return [].reverse.call(arguments) }
     
    inverseArguments(1,2,3) // retourne [3, 2, 1]
    Tu n'aurais pas pu faire arguments.reverse() car arguments ne possède pas le prototype de Array et donc la fonction reverse. Du coup on vient récupérer cette fonction depuis une Array vide [] et on l'applique sur notre objet arguments.

    Entre apply et call, il n'y a qu'une toute petite différence : pour apply le second argument est une Array contenant les arguments à passer à la fonction, tandis que pour call il faut passer les arguments les uns à la suite des autres. apply est donc utile quand tu as une Array à disposition. Par exemple si tu as une Array de nombres et que tu veux récupérer le plus grand nombre dans cette liste:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Math.max.apply(null, [1,7,5,2,9,3]); // retournera 9
    Ici le contexte d'appel de Math.max n'est pas important, on a mis null comme on aurait pu mettre Math ou n'importe quoi d'autre.

    Notons qu'avec ES6 et le nouvel opérateur spread "...", on a plus vraiment besoin de apply puisqu'on peut transformer facilement une array en liste d'arguments.
    One Web to rule them all

  3. #3
    Rédacteur/Modérateur
    Avatar de beekeep
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    2 005
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 2 005
    Points : 3 325
    Points
    3 325

Discussions similaires

  1. Utilité des méthodes call / apply
    Par chok371 dans le forum Général JavaScript
    Réponses: 13
    Dernier message: 14/01/2011, 00h59
  2. méthode de cryptage, appli client/serveur
    Par sir_gcc dans le forum Développement
    Réponses: 1
    Dernier message: 14/09/2005, 13h13
  3. Com entre une appli java et du javaScript dans du Html
    Par bpy1401 dans le forum Applets
    Réponses: 1
    Dernier message: 20/07/2005, 10h54
  4. [XSLT] Différence entre apply-templates et call-template
    Par Cpt.FLAM dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 04/04/2005, 19h47
  5. différence call-template et apply-templates
    Par mousstik dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 08/11/2004, 13h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo