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] setInterval + méthode


Sujet :

JavaScript

  1. #1
    Membre régulier Avatar de Paniez
    Homme Profil pro
    Communication & Webservices
    Inscrit en
    Janvier 2003
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Communication & Webservices
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2003
    Messages : 186
    Points : 107
    Points
    107
    Par défaut [POO] setInterval + méthode
    Bonjour,

    J'ai écrit un objet par le "mode" prototype.
    Dans la définition des méthodes, j'ai :
    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
    prem : function()
    {
    ...
    setInterval("deuxieme(_param)",5000);
    setInterval("troisieme()",5000);
    ...
    }
    deuxieme : function(_param)
    {
    ...
    }
    troisieme : function()
    {
    ...
    }
    L'appel de setInterval me renvoi un undefined. J'ai essayé avec le rajout de function :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    setInterval(function(){deuxieme(_param);},5000);
    et aussi avec this, mais rien n'y fait.


    Merci d'avance

  2. #2
    Rédacteur

    Homme Profil pro
    Responsable de projet
    Inscrit en
    Mai 2009
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de projet
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2009
    Messages : 634
    Points : 3 511
    Points
    3 511
    Par défaut
    Salut,

    setInterval nécessite 2 paramètres : la fonction (entre guillement) et un délai (en ms). Exemple :
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    setInterval("deuxieme(_param)", 2000);
    setInterval("troisieme()", 2000);

  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 221
    Points
    5 221
    Par défaut
    sachant aussi que les arguments de la fonction sont normalement placés en troisième paramètre de setInterval;

  4. #4
    Membre régulier Avatar de Paniez
    Homme Profil pro
    Communication & Webservices
    Inscrit en
    Janvier 2003
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Communication & Webservices
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2003
    Messages : 186
    Points : 107
    Points
    107
    Par défaut
    Re,
    Citation Envoyé par ornitho13 Voir le message
    Salut,

    setInterval nécessite 2 paramètres : la fonction (entre guillement) et un délai (en ms). Exemple :
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    setInterval("deuxieme(_param)", 2000);
    setInterval("troisieme()", 2000);
    Erreur de copier-coller, j'ai corrigé.

    Je pense plutôt qu'il n'arrive pas à aller chercher ma méthode du fait que c'est dans l'objet courant (d'où l'essai avec mon this au début).

  5. #5
    Membre expérimenté Avatar de Willpower
    Homme Profil pro
    sans emploi
    Inscrit en
    Décembre 2010
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : sans emploi

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 009
    Points : 1 519
    Points
    1 519
    Par défaut
    Citation Envoyé par Paniez Voir le message
    Re,

    Erreur de copier-coller, j'ai corrigé.

    Je pense plutôt qu'il n'arrive pas à aller chercher ma méthode du fait que c'est dans l'objet courant (d'où l'essai avec mon this au début).
    je vois que tu as édité ton poste original pour rajouter les millisecondes mais tu n'as pas rajouté les guillemets ! ton code chez toi possède-t'il bien ces guillemets ?

  6. #6
    Membre régulier Avatar de Paniez
    Homme Profil pro
    Communication & Webservices
    Inscrit en
    Janvier 2003
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Communication & Webservices
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2003
    Messages : 186
    Points : 107
    Points
    107
    Par défaut
    Citation Envoyé par Willpower Voir le message
    je vois que tu as édité ton poste original pour rajouter les millisecondes mais tu n'as pas rajouté les guillemets ! ton code chez toi possède-t'il bien ces guillemets ?
    Re,
    Suite à vos messages (et je pense avoir testé cette option), j'ai (re)mis les double-quote et non, il ne trouve pas la méthode.
    C'est en farfouillant que j'avais trouvé cette option en repassant par "function".
    Si je veux rester logique, sans me préoccuper de la sémantique, le code serait plus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    setInterval("this.deuxieme(_param)",5000);
    setInterval("this.troisieme()",5000);
    En mettant ce genre de syntaxe, Firebug me dit "this.deuxieme is not a function".

  7. #7
    Membre expérimenté Avatar de Willpower
    Homme Profil pro
    sans emploi
    Inscrit en
    Décembre 2010
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : sans emploi

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 009
    Points : 1 519
    Points
    1 519
    Par défaut
    edit: je n'avais pas vu que tu étais dans un "object" en fait, au temps pour moi :

    crée une variable pour sauvergarder le this et appelle tes autres fonction sur cette variable :

    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
    prem : function()
    {
    ...
    var that = this;
    setInterval("that.deuxieme(_param)",5000);
    setInterval("that.troisieme()",5000);
    ...
    }
    deuxieme : function(_param)
    {
    ...
    }
    troisieme : function()
    {
    ...
    }
    désolé, de ne pas avoir vu ça tout de suite.


    edit: re au temps pour moi, la bonne solution est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    prem : function()
    {
    ...
    var that=this,fn1 = function(_param){that.deuxieme();},fn2 = function(){that.troisieme()};
    setInterval(fn1,5000);
    setInterval(fn2,5000);
    ...
    }
    car setInterval est executé et défini (tout comme un eval) en dehors de la fonction et le string évalué n'a donc pas accès à tes variables locales.

  8. #8
    Membre régulier Avatar de Paniez
    Homme Profil pro
    Communication & Webservices
    Inscrit en
    Janvier 2003
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Communication & Webservices
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2003
    Messages : 186
    Points : 107
    Points
    107
    Par défaut
    Re,
    Citation Envoyé par Willpower Voir le message
    edit: re au temps pour moi, la bonne solution est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    prem : function()
    {
    ...
    var that=this,fn1 = function(_param){that.deuxieme();},fn2 = function(){that.troisieme()};
    setInterval(fn1,5000);
    setInterval(fn2,5000);
    ...
    }
    car setInterval est executé et défini (tout comme un eval) en dehors de la fonction et le string évalué n'a donc pas accès à tes variables locales.
    Bien vu, ça a solutionné tous mes problèmes sauf un.
    Quand un paramètre est un entier, Firebug me renvoie une erreur : "missing formal parameter".

  9. #9
    Membre régulier Avatar de Paniez
    Homme Profil pro
    Communication & Webservices
    Inscrit en
    Janvier 2003
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Communication & Webservices
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2003
    Messages : 186
    Points : 107
    Points
    107
    Par défaut
    Citation Envoyé par Paniez Voir le message
    Re,


    Bien vu, ça a solutionné tous mes problèmes sauf un.
    Quand un paramètre est un entier, Firebug me renvoie une erreur : "missing formal parameter".
    A priori ça provient d'une autre erreur, sans lien apparent.
    Du coup, ce sujet est résolu.

    Merci encore

  10. #10
    Membre expérimenté Avatar de Willpower
    Homme Profil pro
    sans emploi
    Inscrit en
    Décembre 2010
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : sans emploi

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 009
    Points : 1 519
    Points
    1 519
    Par défaut
    Citation Envoyé par Paniez Voir le message
    A priori ça provient d'une autre erreur, sans lien apparent.
    Du coup, ce sujet est résolu.

    Merci encore
    je ne sais pas si ça a un lien, mais j'ai effectivement oublié de repasser le param à l'appel de deuxieme :

    ceci n'est pas correct :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fn1 = function(_param){that.deuxieme();}

    -> il faut rajouter le paramètre comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fn1 = function(_param){that.deuxieme(_param);}
    de rien

  11. #11
    Membre régulier Avatar de Paniez
    Homme Profil pro
    Communication & Webservices
    Inscrit en
    Janvier 2003
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Communication & Webservices
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2003
    Messages : 186
    Points : 107
    Points
    107
    Par défaut
    Re,
    Effectivement, ça change certaines choses.
    En revanche, j'ai l'impression que l'objet est perdu.
    Dans ma fonction deuxieme() où je me sers de la variable (traitement d'image), firebug me dit que la variable (ici _param) est undefined. Or, quand je mets des points d'arret aux entrées et sorties des méthodes, j'ai bien mon objet (chose que je n'avais pas avant la dernière correction de Willpower).

  12. #12
    Membre expérimenté Avatar de Willpower
    Homme Profil pro
    sans emploi
    Inscrit en
    Décembre 2010
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : sans emploi

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 009
    Points : 1 519
    Points
    1 519
    Par défaut
    Citation Envoyé par Paniez Voir le message
    Re,
    Effectivement, ça change certaines choses.
    En revanche, j'ai l'impression que l'objet est perdu.
    Dans ma fonction deuxieme() où je me sers de la variable (traitement d'image), firebug me dit que la variable (ici _param) est undefined. Or, quand je mets des points d'arret aux entrées et sorties des méthodes, j'ai bien mon objet (chose que je n'avais pas avant la dernière correction de Willpower).
    je suis vraiment fatigué aujourd'hui, le code que je t'ai donné ne passe aucun paramètre à la fonction.

    bon, déjà (pour plus de clarter, ça ne changera en rien le prob), donnons des noms diff aux parametres de la fonction : fn1

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fn1 = function(p1){that.deuxieme(p1);}
    ensuite pour l'appel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    setInterval("fn1(_param)",5000);
    au lieu de setInterval(fn1,5000);

    et ne pas utiliser le 3ème paramètre de setIntervalle(contrairement à ce que je disais javatwister) pour passer les paramètre (genre : setInterval(fn1,5000,_param);)car je pense que IE ne gère pas ça. sauf erreur de ma part.

    Citation Envoyé par Paniez Voir le message
    Re,
    Effectivement, ça change certaines choses.
    En revanche, j'ai l'impression que l'objet est perdu.
    Dans ma fonction deuxieme() où je me sers de la variable (traitement d'image), firebug me dit que la variable (ici _param) est undefined. Or, quand je mets des points d'arret aux entrées et sorties des méthodes, j'ai bien mon objet (chose que je n'avais pas avant la dernière correction de Willpower).
    je suis vraiment fatigué aujourd'hui, le code que je t'ai donné ne passe aucun paramètre à la fonction.

    bon, déjà (pour plus de clarter, ça ne changera en rien le prob), donnons des noms diff aux parametres de la fonction : fn1

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fn1 = function(p1){that.deuxieme(p1);}
    ensuite pour l'appel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    setInterval("fn1(_param)",5000);
    au lieu de setInterval(fn1,5000);

    et ne pas utiliser le 3ème paramètre de setIntervalle(contrairement à ce que je disais javatwister) pour passer les paramètre (genre : setInterval(fn1,5000,_param);)car je pense que IE ne gère pas ça. sauf erreur de ma part.

    edit: si ton _param est une variable locale, cela risque de ne pas fonctionner (surement l'erreur de ton int) il faudra donc encore complexifier la solution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    var fn1 = (function(p1,that){ return function(){that.deuxieme(p1);};})(_param,this),
    fn2 = (function(that){ return function(){that.troisieme();};})(this);
    setInterval(fn1,5000);
    setInterval(fn2,5000);
    tu remarqueras que le that, est également défini différemment que précédemment (tant qu'a faire hein^^)


    edit2: je n'aime pas proposer de solution sans la tester donc je viens de test et ça fonctionne du premier coup ! j'suis trop fort aujourd'hui
    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
    obj = {
    prem : function()
    {
    	var _param=3;
    	var fn1 = (function(p1,that){ return function(){that.deuxieme(p1);};})(_param,this),
    	fn2 = (function(that){ return function(){that.troisieme();};})(this);
    	setInterval(fn1,3000);
    	setInterval(fn2,5000);
     
    },
    deuxieme : function(_param)
    {
    	alert("deuxieme("+_param+")");
    },
    troisieme : function()
    {
    	alert("troisieme");
    }
    };
     
    obj.prem();

  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
    ah oui effectivement, t'as l'air claqué Willpower


    en fait, IE à l'âge de pierre (version 4) ne comprenait pas cette solution pourtant sympathique; mais depuis, que de progrès

  14. #14
    Membre expérimenté Avatar de Willpower
    Homme Profil pro
    sans emploi
    Inscrit en
    Décembre 2010
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : sans emploi

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 009
    Points : 1 519
    Points
    1 519
    Par défaut
    Citation Envoyé par javatwister Voir le message
    ah oui effectivement, t'as l'air claqué Willpower


    en fait, IE à l'âge de pierre (version 4) ne comprenait pas cette solution pourtant sympathique; mais depuis, que de progrès
    heu.... finalement en testant (sous IE8), ça n'a quand même pas l'air de fonctionner ou alors je m'y prend mal :

    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
    obj = {
    prem : function()
    {
    	var p=3;
    	var that = this;
    	var fn1 = function(p1){that.deuxieme(p1);};
    	setInterval(fn1,3000,p);
     
    },
    deuxieme : function(_param){
    	alert("deuxieme("+_param+")");
    }
    };
     
    obj.prem();
    m'affiche le bon résulat sous chrome et firefox mais me donne un "undefined" pour le parametre sous IE.

  15. #15
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 060
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 060
    Points : 44 585
    Points
    44 585
    Par défaut
    une façon d'y arriver
    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
    var obj = {
      prem : function(){
        var p=3;
        var that = this;
        var fn1 = function(p1){that.deuxieme(p1);};
        //setInterval(fn1,3000,p);
        (function( fct , param){
          setInterval( function(){
            fct( param);
          }, 3000);
        })( fn1, p);
      },
      deuxieme : function(_param){
        alert("deuxieme("+_param+")");
      }
    };
     
    obj.prem();

  16. #16
    Membre régulier Avatar de Paniez
    Homme Profil pro
    Communication & Webservices
    Inscrit en
    Janvier 2003
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Communication & Webservices
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2003
    Messages : 186
    Points : 107
    Points
    107
    Par défaut
    Re,

    Dans vos réponses, il y a des "p" et des "p1" (sans jeux de mots de ma part) ; est-ce la même variable (et donc une erreur d'écriture) ou est-ce une autre.
    Dans la dernière solution proposée par NoSmoking, le problème est qu'il me faut récupérer la valeur de setInterval (parce qu'avec toutes ces function de function, je suis un peu perdu).

  17. #17
    Membre expérimenté Avatar de Willpower
    Homme Profil pro
    sans emploi
    Inscrit en
    Décembre 2010
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : sans emploi

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 009
    Points : 1 519
    Points
    1 519
    Par défaut
    Citation Envoyé par Paniez Voir le message
    Re,

    Dans vos réponses, il y a des "p" et des "p1" (sans jeux de mots de ma part) ; est-ce la même variable (et donc une erreur d'écriture) ou est-ce une autre.
    Dans la dernière solution proposée par NoSmoking, le problème est qu'il me faut récupérer la valeur de setInterval (parce qu'avec toutes ces function de function, je suis un peu perdu).
    ce n'est pas une erreur d'écriture, mais au final c'est la même variable qui prend un autre nom une fois passé en paramètre dans la fonction.

    exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var le_prenom_de_willpower = "boris";
    function affiche_nom(nom){
      alert(nom);
    }
    affiche_nom(le_prenom_de_willpower);
    dans la fonction la variable s'appelle "nom" mais dans cette exemple elle sera la même que "le_prenom_de_willpower"

    et effectivement, l'approche de noSmoking est bien meilleure même s'il déclare 2 fonctions de trop :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    var obj = {
      prem : function(){
        var p=3;
        var that = this;
        setInterval( function(){ that.deuxieme( p); }, 3000);
      },
      deuxieme : function(_param){
        alert("deuxieme("+_param+")");
      }
    };
     
    obj.prem();

    tout simplement

    nb: désolé, d'être encore une fois parti dans des solutions casse-têtes pour rien^^(j'avais vraiment la tête dans le *** hier)

  18. #18
    Membre régulier Avatar de Paniez
    Homme Profil pro
    Communication & Webservices
    Inscrit en
    Janvier 2003
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Communication & Webservices
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2003
    Messages : 186
    Points : 107
    Points
    107
    Par défaut
    Re,

    Citation Envoyé par Willpower Voir le message
    et effectivement, l'approche de noSmoking est bien meilleure même s'il déclare 2 fonctions de trop :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    var obj = {
      prem : function(){
        var p=3;
        var that = this;
        setInterval( function(){ that.deuxieme( p); }, 3000);
      },
      deuxieme : function(_param){
        alert("deuxieme("+_param+")");
      }
    };
     
    obj.prem();

    tout simplement

    nb: désolé, d'être encore une fois parti dans des solutions casse-têtes pour rien^^(j'avais vraiment la tête dans le *** hier)
    Impeccable

  19. #19
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 060
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 060
    Points : 44 585
    Points
    44 585
    Par défaut
    Citation Envoyé par Willpower
    l'approche de noSmoking est bien meilleure même s'il déclare 2 fonctions de trop
    merci pour le bien meilleur, quoique
    concernant les fonctions en trop je n'est fait que reprendre la fonction "tampon" fn1 qui effectivement n'a pas lieu d'exister...mais...

    l'exemple est intéressant pour montrer comment l'on peut passer des paramètres à une fonction setInterval, itou pour setTimeout, qui s'exécutera hors du scope.

    Concernant l'appel de la fonction dans la méthode setInterval, je pense qu'il est effectivement préférable d'utiliser la syntaxe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    setInterval( function(){
      // les instructions ou autre
    }, delai);
    plutôt que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    setInterval( "fonction()", delai);
    Citation Envoyé par Paniez
    le problème est qu'il me faut récupérer la valeur de setInterval (parce qu'avec toutes ces function de function, je suis un peu perdu).
    l'exemple que je mets te permets de voir comment l'on peut réaliser cela
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>[setInterval]</title>
    <script type="text/javascript">
    var obj = {
      iTimer : 0,
     
      prem : function( param){
      	var valeur = param ? param : 0;
      	var that = this;
      	var fn1 = function( param){
          that.deuxieme( param);
        };
        // lancement setInterval et recup valeur du timer dans iTimer
      	this.iTimer = (function( fct , param, delai){
      	  timer = setInterval( function(){
           fct( param);
      	  }, delai);
          return( timer);
      	})( fn1, valeur, 3000);
      },
     
      stop : function(){
        // clear le timer en cours
        clearInterval( this.iTimer);
        alert('STOP !');
        // relance fonction
        this.prem('nouveau param');
      },
     
      deuxieme : function( param){
      	alert("deuxieme(" +param +")" +"\niTimer = " +this.iTimer);    
      }
    };
    obj.deuxieme('1st appel');
    obj.prem('valeur parametre');
    obj.deuxieme('2nd appel');
    </script>
    </head>
    <body>
    <button onclick="obj.stop();">Stop</button>
    </body>
    </html>
    à toi de jouer maintenant

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 28/11/2014, 14h46
  2. [PHP 5.3] POO - Créer méthode pour une recherche multi-critères
    Par almoha dans le forum Langage
    Réponses: 3
    Dernier message: 05/05/2014, 15h52
  3. [POO] [Héritage] Méthode non héritée
    Par WebDream dans le forum Langage
    Réponses: 9
    Dernier message: 09/10/2008, 13h52
  4. [POO] ajout méthodes sur l'objet Array
    Par kimcharlene dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 24/04/2008, 16h40
  5. [POO] Problème avec setInterval/méthodes d'écriture
    Par Lpu8er dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 18/07/2006, 15h37

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