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 :

[POO] Window pour lancer une fonction


Sujet :

JavaScript

  1. #1
    Membre actif
    Homme Profil pro
    Inscrit en
    Avril 2006
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Avril 2006
    Messages : 245
    Points : 239
    Points
    239
    Par défaut [POO] Window pour lancer une fonction
    Bonjour

    Je n'ai pas de problème particulier mais juste une interrogation :

    J'ai une chaine de caractère contenant le nom d'une fonction. Cette fonction reçoit en paramètre un objet et effectue un traitement (peu importe) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    var ch = "maFonction";
    var param = document.getElementById('monElement');
     
    function maFonction(obj) {
        alert(obj.nodeName);
    }
    Le challenge est de se servir de la chaine de caractère pour appeler la fonction sans oublier le paramètre param.

    J'ai d'abord pensé à eval

    Cela marche correctement sous FIREFOX (je n'ai testé que sur celui-là, mais peu importe encore une fois). J'ai trouvé une autre solution :

    qui fonctionne tout aussi bien mais est-ce vraiment 'légal' ? Cette méthode, même si la syntaxe est tout à fait valide, me paraît pas très propre ... Qu'en pensez-vous ? Laquelle est la meilleure ?

  2. #2
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 666
    Points
    66 666
    Billets dans le blog
    1
    Par défaut
    window sans l'ombre d'un hésitation
    http://www.developpez.net/forums/sho...d.php?t=558109

  3. #3
    Membre actif
    Homme Profil pro
    Inscrit en
    Avril 2006
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Avril 2006
    Messages : 245
    Points : 239
    Points
    239
    Par défaut
    Moui, mais pourquoi ne pas utiliser eval ?
    Dans la doc Javascript de Firefox, il n'est pas dit d'utiliser window plutôt qu'eval, ni que cette dernière pose un quelconque problème ...

  4. #4
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 666
    Points
    66 666
    Billets dans le blog
    1
    Par défaut
    plus long plus lourd

    un petit benchmarking montre que eval est 5 fois plus lent que window ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    <script type='text/javascript'>
     
    var variable=500
    var spountz1=0
    var spountz2=1
     
    function foo(obj){
     return obj*6}
     
    start1= new Date()
    for(i=0;i<1000;i++){
    spountz1= eval("foo(variable)")
    }
    stop1=new Date()
    laps1=stop1-start1
     
     
    start2= new Date()
    for(i=0;i<1000;i++){
    spountz2=window["foo"](variable)
    }
    stop2=new Date()
    laps2=stop2-start2
     
     
    alert(spountz1 + " durée eval : "+ laps1+ "  //  "+spountz2+" Durée window : " + laps2)
     
     
    </script>

  5. #5
    Membre actif
    Homme Profil pro
    Inscrit en
    Avril 2006
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Avril 2006
    Messages : 245
    Points : 239
    Points
    239
    Par défaut
    merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème pour lancer une fonction dans une classe
    Par Jiyuu dans le forum Général Python
    Réponses: 13
    Dernier message: 24/08/2010, 09h05
  2. Onclick sur image pour lancer une fonction
    Par kilrou dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 07/04/2010, 02h34
  3. Utiliser Createprocess pour lancer une fonction
    Par lolita4882 dans le forum C++
    Réponses: 3
    Dernier message: 14/03/2008, 12h01
  4. pb pour lancer une fonction relative à AD
    Par poussin_44 dans le forum VB.NET
    Réponses: 7
    Dernier message: 07/07/2007, 14h05
  5. [DOM] Onmouseover pour lancer une fonction avec arguments
    Par Trock dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 01/06/2007, 13h31

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