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] Passet un objet avec la fonction setTimeout()


Sujet :

JavaScript

  1. #1
    Membre éclairé Avatar de Death83
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 667
    Points : 878
    Points
    878
    Par défaut [POO] Passet un objet avec la fonction setTimeout()
    Salut à tous,

    j'ai un petit soucis pour passer un object avec la fonction setTimeout().

    J'ai essayé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    setTimeout("mainLoop.call(this)",200);
    Mais ca ne marche pas .

    Avez vous une idée?

  2. #2
    Membre à l'essai
    Inscrit en
    Juillet 2007
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 22
    Points : 23
    Points
    23
    Par défaut
    Salut,

    Dans ce que tu met, this ne correspond à rien... Si le this doit correspondre à un objet, tu met :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var idobjet = 'monobjet1';
    setTimeout("mainLoop.call(document.getElementById('"+idobjet+"'))",200);
    Voila
    A+

  3. #3
    Membre éclairé Avatar de Death83
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 667
    Points : 878
    Points
    878
    Par défaut
    SI dans mon cas this correspond à quelque chose car il est dans une methode qui traite un objet. Si je fait alert(this.name) juste avant j'ai bien le nom de l'objet, mais si je le fait dans la fonction mainLoop il me renvoi un alert vide (et j'ai une erreur javascript this.name undefined.

    A mon avis il dois falloir écrir le passage avec le setTimout différement, mais comment? C'est ca la question

  4. #4
    Membre à l'essai
    Inscrit en
    Juillet 2007
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 22
    Points : 23
    Points
    23
    Par défaut
    Mais... Je ne comprend pas...
    Le t'a fonction elle est censée faire quoi après ?
    Normalement, tu l'éxecute dans quelles conditions ?

  5. #5
    Membre éclairé Avatar de Death83
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 667
    Points : 878
    Points
    878
    Par défaut
    Bah je veut juste envoyer l'objet en cours dans la fonction main loop.

    Normalement quand on fait methode.call(); on l'écrit de la manière suivante:

    methode.call(objet,"parametre1","parametre2...").

    Donc la ma fonction mainLoop ne recoit pas de paramètre mais je dois tout de mê préciser l'object envoyé.

    Normalement ca marche, mais la vu la forme bizarre pour le setTimout (de devoir mettre le code à executer entre "") ca ne marche pas .

  6. #6
    Membre à l'essai
    Inscrit en
    Juillet 2007
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 22
    Points : 23
    Points
    23
    Par défaut
    Dans ce cas, essaye :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    setTimeout("mainLoop.call("+this+")",200);

  7. #7
    Membre éclairé Avatar de Death83
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 667
    Points : 878
    Points
    878
    Par défaut
    Citation Envoyé par Samuel2202 Voir le message
    Dans ce cas, essaye :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    setTimeout("mainLoop.call("+this+")",200);



    J'ai déjà essayé, ca ne marche pas nom plus

  8. #8
    Membre à l'essai
    Inscrit en
    Juillet 2007
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 22
    Points : 23
    Points
    23
    Par défaut
    Citation Envoyé par Death83 Voir le message


    J'ai déjà essayé, ca ne marche pas nom plus
    Ha la mince
    Et :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var action = mainLoop.call(this);
    setTimeout(action,200);
    La je crain que ça ne le fasse avant...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function action () {
    mainLoop.call(this);
    }
    setTimeout("action()",200);
    ?

  9. #9
    Membre éclairé Avatar de Death83
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 667
    Points : 878
    Points
    878
    Par défaut
    Citation Envoyé par Samuel2202 Voir le message
    Ha la mince
    Et :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var action = mainLoop.call(this);
    setTimeout(action,200);
    Ca ne marche pas il dit que action est pas définit (en rajoutant les "" sinon le setTimout n'est pas valide)

    La je crain que ça ne le fasse avant...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function action () {
    mainLoop.call(this);
    }
    setTimeout("action()",200);
    ?
    La ca ne marchera pas parceque l'on aura perdu le pointeur this

  10. #10
    Membre éclairé Avatar de Death83
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 667
    Points : 878
    Points
    878
    Par défaut
    Personne d'autres n'a d'idées?

    Jsuis bien embêté maintenant moi

    la fonction setTimout est vraiment bizarre. Il n'y a pas une autre facon de l'écrire par hasard?

  11. #11
    Membre actif
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 221
    Points : 233
    Points
    233
    Par défaut
    J'ai toujours eu ce probleme et j'ai jamais trouvé la solution donc je ne peux pas te repondre

  12. #12
    Membre éclairé Avatar de Death83
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 667
    Points : 878
    Points
    878
    Par défaut
    Citation Envoyé par jypees Voir le message
    J'ai toujours eu ce probleme et j'ai jamais trouvé la solution donc je ne peux pas te repondre
    Arf :S.

    C'est bien embetant.

    Peut êtr en recréant une fonction setTimout soit même (qui appel cette fonction elle même). Mais c'est loin d'être gagné

  13. #13
    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 221
    Points
    5 221
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var action = this;
    setTimeout("mainLoop.call(action)",200);
    ???

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ou encore
    setTimeout("mainLoop.call()",200, action);
    ???

  14. #14
    Membre éclairé Avatar de Death83
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 667
    Points : 878
    Points
    878
    Par défaut
    Citation Envoyé par javatwister Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var action = this;
    setTimeout("mainLoop.call(action)",200);
    ???

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ou encore
    setTimeout("mainLoop.call()",200, action);
    ???
    Je connaissais pas cette écriture pour setTimeout, j'essairai ce soir et je te dirai ce qu'il en est .

  15. #15
    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 221
    Points
    5 221
    Par défaut
    essayons autre chose:


    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
    <script type="text/javascript">
     
     
    function fun(p){
    window["p"]=this;
     
    setTimeout("alert(window['p'].param)",1000)
    }
     
    function go(param){
    this.param=param;
    }
     
    go.prototype.fun=fun;
     
    obj=new go("truc");
    obj.fun()
     
    </script>
    c'est tjrs le pbm avec setTimeout; même si tu définis juste avant une variable pour rendre accessible un paramètre, elle n'aura pas une portée globale; d'où la proposition de passer par le tableau window;

  16. #16
    Membre éclairé Avatar de Death83
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 667
    Points : 878
    Points
    878
    Par défaut
    Citation Envoyé par javatwister Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var action = this;
    setTimeout("mainLoop.call(action)",200);
    ???

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ou encore
    setTimeout("mainLoop.call()",200, action);
    ???
    Avec la 1er méthode la console javascript dit que action n'est pas défini

    et avec la 2ème il n'y a pas d'erreur mais le this récupérer dans la fonction mainLoop est vide (le alert(this.name) renvoi un alert vide).

  17. #17
    Membre éclairé Avatar de Death83
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 667
    Points : 878
    Points
    878
    Par défaut
    Re salut,

    par conter ton troisième cas marche nickel .

    Merci javatwister

Discussions similaires

  1. [POO] Souci avec la fonction SetTimeOut
    Par talrashha dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 14/09/2008, 20h25
  2. [POO] stocker un objet avec setAttribute
    Par maxine dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 29/05/2008, 09h13
  3. Boucle avec la fonction setTimeout
    Par mathilda dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 06/10/2006, 10h08
  4. [POO] Instancier un objet avec le nom de la classe
    Par shinchun dans le forum Langage
    Réponses: 4
    Dernier message: 08/06/2006, 13h44
  5. [POO] Déplacer un objet avec un pas.
    Par Olaf MENJI dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 28/12/2005, 13h32

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