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

ralecul 112 Messages postés dimanche 23 mars 2003Date d'inscription 1 août 2008 Dernière intervention - 16 sept. 2006 à 00:48 - Dernière réponse : ralecul 112 Messages postés dimanche 23 mars 2003Date d'inscription 1 août 2008 Dernière intervention
- 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
cs_bultez 13619 Messages postés jeudi 13 février 2003Date d'inscription 15 octobre 2013 Dernière intervention - 16 sept. 2006 à 07:56
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 />

Merci cs_bultez 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 74 internautes ce mois-ci

Commenter la réponse de cs_bultez
ralecul 112 Messages postés dimanche 23 mars 2003Date d'inscription 1 août 2008 Dernière intervention - 16 sept. 2006 à 10:22
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.