SetInterval POO - prob appel fonction membre [Résolu]

Messages postés
112
Date d'inscription
dimanche 23 mars 2003
Dernière intervention
1 août 2008
- - Dernière réponse : ralecul
Messages postés
112
Date d'inscription
dimanche 23 mars 2003
Dernière intervention
1 août 2008
- 16 sept. 2006 à 10:22
Bonjour,

Je suis en train de réécrire mon système de panorama
(dispo ici)
en version POO. Mais la, je bute sur un problème avec SetInterval et l'appel à une méthode membre d'un objet. Je m'explique : je n'arrive pas à récupérer la valeur de this.decalage dans la méthode this.increase (alias TestClass_Increase). J'ai trouvé une solution proposée sur le forum mais elle utilise une variable globale qui empêche donc des éxécutions multiples au sein de la même page. Si vous appuyez sur les 2 bouttons start le deuxième arrête le premier... Donc j'aimerais savoir si il est possible de faire autrement ?



Merci d'avance

Henri




<html>
    <head>
        <meta http-equiv= "Content-Script-Type" content="text/javascript" />
        <title>Hello World 42</title>
    </head>
   
        <script type="text/javascript">       

    /* Test Class */
        function TestClass_init()
        {
            this.addDebug(' Init : decalage = '+this.decalage);
        }
       
        function TestClass_start()
        {  
            //solution trouvée sur le forum, proposé par bultez
            quoi = this;//mais ne permet pas des éxécutions multiples
            quoi.actif = setInterval(function(){quoi.increase();}, 200);
       
           
            //this.actif = setInterval(this.increase, 200); // ne trouve pas les variables menbres dans this.increase
            //this.actif = setInterval('this.increase()', 200); // ne marche pas
        }

        function TestClass_Stop()
        {
            this.addDebug(' Stop : decalage = '+this.decalage);
            clearInterval(this.actif);
        }
       
        functionTestClass_Increase()
        {
            this.decalage += 1;
            this.addDebug(' Increase : decalage = '+this.decalage);
        }
          
        function TestClass(debug)
        {
            this.decalage = 0;
            this.start    =TestClass_start;
            this.increase = TestClass_Increase;
            this.stop     = TestClass_Stop;      
            this.init     = TestClass_init;
            this.debug    = debug;
            this.addDebug = addDebug;
            this.clearDebug = clearDebug;
            this.init();
        }
       
    /* DEBUG */
        function addDebug(trace)
        {
            var debug = document.getElementById(this.debug);
            debug.innerHTML += trace+'
\n';
        }
       
        function clearDebug()
        {
            var debug = document.getElementById(this.debug);
            debug.innerHTML = "";
        }
        </script>
        <!-- zone de debug n°1 -->
       

           

           

           

           
           
           
       

       
        <!-- zone de debug n°2 -->
       

           

           

           

           
           
           
       

        <script type="text/javascript">
            var myTest1 = new TestClass('debug1');
            var myTest2 = new TestClass('debug2');
        </script>
   
</html>
Afficher la suite 

Votre réponse

2 réponses

Meilleure réponse
Messages postés
13619
Date d'inscription
jeudi 13 février 2003
Dernière intervention
15 octobre 2013
42
3
Merci
une erreur de ma part ( faute d'inattention) !
il suffit de mettre une variable locale !
        var quoi = this;//mais ne permet pas des éxécutions multiples
<hr />
cordialement   Bul    mon Site    =Bul M'écrire<hr />

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 118 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_bultez
Messages postés
112
Date d'inscription
dimanche 23 mars 2003
Dernière intervention
1 août 2008
0
Merci
Merci beaucoup !

Effectivement ça marche beaucoup mieux avec une variable locale (pourquoi j'y ai pas pensé ?), je vais donc pouvoir continuer la migration de ma source en poo !

PS: pour ceux qui veulent tester ce petit bout de code, j'ai visiblement rajouté une erreur lors de la colorisation syntaxique : functionTestClass_Increase()  ->function TestClass_Increase() (il manque un espace entre function et TestClass_Increase).
Commenter la réponse de ralecul

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.