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 :

setTimeout avec une méthode privée


Sujet :

JavaScript

  1. #1
    Rédacteur
    Avatar de Erakis
    Homme Profil pro
    Développeur informatique
    Inscrit en
    octobre 2003
    Messages
    523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : octobre 2003
    Messages : 523
    Points : 233
    Points
    233
    Par défaut setTimeout avec une méthode privée
    Bonjour,

    J'ai quelque petit problème lorsque j'appel une méthode privée avec la un setTimeout. La première tentative s'effectue correctement mais les autres échouent avec l'erreur suivante : "DoMove is not defined". Pourtant cette fonction est bien définie à l'intérieur de mon objet...

    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
     
    function MyObject( x, y, z ) {
        this.StartMovement = function() {
            // ...
            DoMove();
            // ...
        }
     
        function DoMove() {
            alert( "Moving..." );
            setTimeout( "DoMove()", 1000 );
        }
    }
     
    // Test call
    var Test = new MyObject( 0, 0, 0 );
    Test.StartMovement();
    Merci à tous.
    Mieux vaut ne rien savoir que beaucoup savoir à moitié !
    Faite vous en pas avec la vie, personne en est sortie vivant !

  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 574
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    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 574
    Points : 66 536
    Points
    66 536
    Billets dans le blog
    1
    Par défaut
    heu le setTimeout de la fonction dans la fonction c'est moyen ...
    il existe le setInterval pour ça ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function DoMove() {
            alert( "Moving..." );
     
        }
     
     var moving= setInterval(function(){ DoMove()}, 1000 );
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  3. #3
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    août 2003
    Messages
    3 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : août 2003
    Messages : 3 681
    Points : 5 137
    Points
    5 137
    Par défaut
    si tu veux garder cette architecture, écris:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    setTimeout(DoMove, 1000 );

  4. #4
    Rédacteur
    Avatar de Erakis
    Homme Profil pro
    Développeur informatique
    Inscrit en
    octobre 2003
    Messages
    523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : octobre 2003
    Messages : 523
    Points : 233
    Points
    233
    Par défaut
    Citation Envoyé par javatwister
    si tu veux garder cette architecture, écris:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    setTimeout(DoMove, 1000 );
    Merci, cela fonctionne
    Mais alors pourquoi cela fonctionne QUE lorsqu'on passe la fonction en référence et non "DoMove(...)" ?
    Mieux vaut ne rien savoir que beaucoup savoir à moitié !
    Faite vous en pas avec la vie, personne en est sortie vivant !

  5. #5
    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 574
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    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 574
    Points : 66 536
    Points
    66 536
    Billets dans le blog
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      setTimeout( function(){DoMove()}, 1000 );
    devrait fonctionner aussi ..
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  6. #6
    Expert confirmé
    Avatar de siddh
    Inscrit en
    novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : novembre 2005
    Messages : 3 868
    Points : 5 011
    Points
    5 011
    Par défaut
    la tu passes un pointeur alors que dans une chaine, il l'évalue au moment ou il l'execute et elle est hors de portée
    Alunissage : Procédé technique consistant à déposer des imbéciles sur un rêve enfantin.

    Cours | FAQ | Sources Javascript
    Cours | FAQ | Sources PHP
    Mes Articles

  7. #7
    Rédacteur
    Avatar de Erakis
    Homme Profil pro
    Développeur informatique
    Inscrit en
    octobre 2003
    Messages
    523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : octobre 2003
    Messages : 523
    Points : 233
    Points
    233
    Par défaut
    Merci à tous
    Mieux vaut ne rien savoir que beaucoup savoir à moitié !
    Faite vous en pas avec la vie, personne en est sortie vivant !

  8. #8
    Rédacteur
    Avatar de Erakis
    Homme Profil pro
    Développeur informatique
    Inscrit en
    octobre 2003
    Messages
    523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : octobre 2003
    Messages : 523
    Points : 233
    Points
    233
    Par défaut
    J'ai toutefois un autre petit problème.
    J'ai besion d'appeler deux fonction dans le setTimeout.

    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
    function MyObject( x, y, z ) {
        this.StartMovement = function() {
            // ...
            DoMove();
            // ...
        }
        
        function DoMove() {
            alert( "Moving..." );
            // Erreur
            setTimeout( DoMove, DoOtherStuff, 1000 ); 
            // Pas d'erreur mais cela fait rien, aucune des deux fonction ne s'exécute
            setTimeout( fonction () { DoMove; DoOtherStuff; }, 1000 ); 
        }
    
        function DoOtherStuff() {
            alert( "Do other stuff..." );
        }
    }
    
    // Test call
    var Test = new MyObject( 0, 0, 0 );
    Test.StartMovement();
    Comment faire pour exécuter deux méthodes dans le setTimeout ?
    Merci
    Mieux vaut ne rien savoir que beaucoup savoir à moitié !
    Faite vous en pas avec la vie, personne en est sortie vivant !

  9. #9
    Expert confirmé
    Avatar de siddh
    Inscrit en
    novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : novembre 2005
    Messages : 3 868
    Points : 5 011
    Points
    5 011
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    setTimeout( fonction () { DoMove; DoOtherStuff; }, 1000 );
    avec des () apres les noms ca sera mieux je pense mais vu que domove s'appel met peut etre otherstuff avant
    Alunissage : Procédé technique consistant à déposer des imbéciles sur un rêve enfantin.

    Cours | FAQ | Sources Javascript
    Cours | FAQ | Sources PHP
    Mes Articles

  10. #10
    Membre expert
    Avatar de FremyCompany
    Profil pro
    Étudiant
    Inscrit en
    février 2006
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : février 2006
    Messages : 2 532
    Points : 3 289
    Points
    3 289
    Par défaut
    Citation Envoyé par Erakis
    J'ai toutefois un autre petit problème.
    J'ai besion d'appeler deux fonction dans le setTimeout.

    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
    function MyObject( x, y, z ) {
        this.StartMovement = function() {
            // ...
            DoMove();
            // ...
        }
        
        function DoMove() {
            alert( "Moving..." );
            // Erreur
            setTimeout( DoMove, DoOtherStuff, 1000 ); 
            // Pas d'erreur mais cela fait rien, aucune des deux fonction ne s'exécute
            setTimeout( fonction () { DoMove; DoOtherStuff; }, 1000 ); 
        }
    
        function DoOtherStuff() {
            alert( "Do other stuff..." );
        }
    }
    
    // Test call
    var Test = new MyObject( 0, 0, 0 );
    Test.StartMovement();
    Comment faire pour exécuter deux méthodes dans le setTimeout ?
    Merci
    Et si tu mettais deux setTimeout ? (Bien que la méthode de siddh, avec des paranthèses, marche très bien)
    Ca me semble plus simple...
    Fremy
    Pour vos développements Web et une navigation agréable, le tout gratuit :
    1) IE 8 + IE7Pro (Si vous ne connaissez pas IE7Pro, essayez !)
    2) FF 3 + Web Developper Toolbar + AdBlockPlus + FireBug + GreaseMonkey

  11. #11
    Rédacteur
    Avatar de Erakis
    Homme Profil pro
    Développeur informatique
    Inscrit en
    octobre 2003
    Messages
    523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : octobre 2003
    Messages : 523
    Points : 233
    Points
    233
    Par défaut
    Merci
    Mieux vaut ne rien savoir que beaucoup savoir à moitié !
    Faite vous en pas avec la vie, personne en est sortie vivant !

  12. #12
    Membre à l'essai
    Inscrit en
    janvier 2006
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : janvier 2006
    Messages : 10
    Points : 10
    Points
    10
    Par défaut
    Bonjour.
    J'ai exactement le même besoin.(c'est pour ca que je me permet de m'incruster dans ce post :-p) Mais je n'ai pas déclaré avec la même syntaxe les méthodes de ma classe. Je n'arrive pas a appliquer vos solutions sur ma classe. Bien sur je pourrais la re-coder en utilisant la syntaxe qui fonctionne avec les solution décrites, mais je voudrait savoir si c'est possible avec la syntaxe que j'ai adopté l'histoire de ne pas mourrir bête.

    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
     
    /*-----------Debut de la classe-------------------*/   
    function MyObject( x, y, z ) {
      this.StartMovement = function() {
        // ...
        var moving= setInterval(DoMove, 3000 );
        // ...
      }
      //Declaration d'une méthode de la classe MyObject.
      this.DoMove = MyObject_DoMove;        
    }
     
    //Implementation de la méthode.
    function MyObject_DoMove() {
      alert("DoMove appelé");
      setTimeout(DoMove, 1000 );
    }
    /*--------------fin de la classe------------------*/
     
    // Test call
    var Test = new MyObject( 0, 0, 0 );
    Test.StartMovement();
    Comment puis-je appeler ma fonction recursivement, j'ai besoin du nom de l'objet si je veut l'appeler entre guillemet.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    setTimeout("Test.DoMove()", 1000 );
    Mais je ne crois pas qu'il soit possible de récuperer son propre nom d'instance. Ou alors je doit pouvoir faire reference a mon propre objet avec le mot clef "this". Voici ce que j'ai essayé dans ma fonction "MyObject_DoMove()" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    setTimeout(this.DoMove, 1000 );
    mais je n'obtiens que des erreurs.

    D'autre part j'ai cherché a comprendre ce morceau de code en vain :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    var moving= setInterval(function(){ DoMove()}, 1000 );
    J'ai bien compris a quoi servait "moving" ainsi que le fonctionnement du setInterval. Mais je ne comprend pas a quoi servent les accolades autour du DoMove : "function(){ DoMove()}". Ni le "function" devant.

    Euh voila.

  13. #13
    Expert confirmé
    Avatar de siddh
    Inscrit en
    novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : novembre 2005
    Messages : 3 868
    Points : 5 011
    Points
    5 011
    Par défaut
    en fait dans un setInterval ou timeout, il faut passer une reference a ce que l'on veut executer.

    donc soit un nom de fonction (sans les () sinon c est un appel et pas une ref)
    soit une fonction créée a la volée en faisant function(){ //corps }

    on peut tout a fait créer une fonction de cette manière :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    var hello = function(name){ alert('hello '+name); }
    et ensuite faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    hello('pataphysicien');
    mais la je comprend pas trop ce que tu veux faire puisque le setIntervall va declencher a interval régulier domove.

    si en plus tu lui met un setTimeout avec recursivité, ca risque de boucler severe ton histoire là.

    l'avantage de cette syntaxe pour les timeout c'est qu'au moment ou la fonction est créée, il "voit" la fonction qu'on appel
    Alunissage : Procédé technique consistant à déposer des imbéciles sur un rêve enfantin.

    Cours | FAQ | Sources Javascript
    Cours | FAQ | Sources PHP
    Mes Articles

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

Discussions similaires

  1. Pb avec une méthode de classe
    Par damien27000 dans le forum Langage
    Réponses: 5
    Dernier message: 29/08/2007, 17h50
  2. Réponses: 2
    Dernier message: 01/05/2007, 18h50
  3. Réponses: 7
    Dernier message: 19/03/2007, 20h25
  4. Réponses: 3
    Dernier message: 22/02/2007, 20h02
  5. Problème avec une méthode virtuelle pure
    Par Burckel dans le forum C++
    Réponses: 4
    Dernier message: 05/12/2006, 13h00

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