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 :

Passer une methode de classe a setInterval


Sujet :

JavaScript

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    37
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 37
    Par d�faut Passer une methode de classe a setInterval
    Bonjour,

    Je d�bute en js, et cherche a faire le script suivant :
    j'ai un objet engine, qui a une methode run(), et je veux appeler p�riodiquement run d'une instance de engine via setInterval. Voila mon code

    index.html
    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
     
    <html>
    <head>
    <title>Test</title>
    <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
     
    <script type="text/javascript" src="./sources/prototype.js"></script>
    <script type="text/javascript" src="./sources/engine.js"></script>
    <script type="text/javascript">
      function Start()
      {
        var engine = new MyEngine();
     
        engine.configure();
        engine.start();
      }
    </script>
    </head>
    <body onload="Start();">
    </body>
    </html>
    engine.js
    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
     
    var MyEngine = Class.create(
    {
    	initialize: function()
    	{
    		this.m_lastTime = 0;
    		this.m_startTime = new Date().getTime();
    	},
     
    	start: function()
    	{
    		setInterval(this.run, 15);
    	},
     
    	configure: function()
    	{	
    		// rien pour l'instant
    	},
     
    	run: function()
    	{
    		var timeNow = new Date().getTime();
    		if (this.m_lastTime != 0)
    		{
    			var elapsed = timeNow - this.m_lastTime;
    			var total = timeNow - this.m_startTime;
    			if (total > 1000)
    			{
    				alert("more than 1000 elapsed !");
    			}
    		}
    		this.m_lastTime = timeNow;
    	}	
    });
    donc quand je charge ma page, d'apr�s le debugeur js de chrome, je commence bien par passer dans mon initialize qui init les deux propri�t�s, puis je passe ensuite dans mes run, mais des le premier run les valeur de m_lastTime et m_startTime ne sont plus initialis�es. Je n'ai pas cons�quent jamais l'alerte car mon total vaut NaN...
    Je ne comprend pas pourquoi ?

  2. #2
    Membre Expert
    Avatar de gwyohm
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Octobre 2007
    Messages
    925
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 45
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 925
    Par d�faut
    Bonjour,

    Ton probl�me, c'est que tu la fonction run de ton objet, mais sans l'objet lui m�me...

    Tu as l'air d'utiliser prototype pour cr�er ta classe, il faut donc que tu cr�es une fonction anonyme qui soit li�e � ton objet :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    // ...
    start: function()
    	{
    		setInterval(this.run.bind(this), 15);
    	},
    // ...

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    37
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 37
    Par d�faut
    d'accord, alors cela veut dire que lorsqu'on declare une methode d'objet ce n'est pas vraiment une methode lie aux instances de notre classe, mais juste une fonction independante en fait ?
    ou alors une methode de classe comme par exemple une methode static en c++ ?

    Je viens du C++, et je n'ai pas encore bien saisi le principe objet de javacript, d'ailleur si quelqu'un sait ou je peux trouver des explications sur la logique js, ca m'interesse, car a par des infos sur la syntaxe elle meme je ne trouve pas grand chose.

  4. #4
    Membre Expert
    Avatar de gwyohm
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Octobre 2007
    Messages
    925
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 45
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 925
    Par d�faut
    C'est surtout que quand tu fais
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    setInterval(this.run, 15)
    this.run renvoie une fonction. Mais pas la m�thode de l'objet, elle est d�-contextualis�e.

    Dans ce genre de cas, j'ai tendance � faire autrement (parce que je n'aime pas non plus �crire this.method.bind(this)):

    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
     
    var MaClasse = Class.create({
      initialize: function() {
        // ...
      },
      methode1: function() {
        // ...
      },
      start: function() {
        setInterval(MaClasse.run.curry(this), 15);
      },
      // ...
    });
     
    // Définition de méthode statiques :
    Object.extend(MaClasse, {
      run: function(instance) {
        instance.methode1();
      }
    });

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Appel d'une methode de classe par message inop�rant dans une dll
    Par Jacques Deyrieux dans le forum API, COM et SDKs
    R�ponses: 3
    Dernier message: 10/08/2010, 08h10
  2. Passer une methode en argument
    Par archer dans le forum C#
    R�ponses: 1
    Dernier message: 06/08/2008, 16h42
  3. [POO] appeler une methode de classe dans une fonction
    Par ryykko dans le forum G�n�ral JavaScript
    R�ponses: 5
    Dernier message: 11/02/2008, 22h10
  4. execution de blt dans une methode de classe
    Par micflor dans le forum DirectX
    R�ponses: 2
    Dernier message: 13/03/2006, 20h31
  5. [POO] Prob avec une méthode de classe
    Par Ludo75 dans le forum Langage
    R�ponses: 9
    Dernier message: 06/02/2006, 22h37

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