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 :

Utilisation de setTimeout avec des classes : BUG!


Sujet :

JavaScript

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2006
    Messages : 29
    Points : 25
    Points
    25
    Par défaut Utilisation de setTimeout avec des classes : BUG!
    Hello world,
    hum voici une page troublantes :
    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
     
    <html>
    <head>
    	<script type="text/javascript">
    		function timeoutTest() {
    		    this.property = 500;
    			this.test1();
    		}
    		timeoutTest.prototype.test1 = function(){
    			alert("property value is " + this.property);
    			setTimeout(this.test2, 1500);
    			return;
    		}
    		timeoutTest.prototype.test2 = function(){
    			alert("After timeout, property value is : "+ this.property);
    			return;
    		}
    	</script>
    </head>
     
    <body>
    	<h3>timeout bug ?</h3>
    	<input type="button" value="click me" onclick="new timeoutTest()"/>
    </body>
    </html>
    Comme vous le voyez on a à faire à une simple class "timeoutTest" comportant une seule proprieté, test1 et test2 sont ses sous-classes. Bon... question : pourquoi, mais POURQUOI la propriété est 'undefined' dans test2?????
    Mon eternel reconnaissance à celui qui trouve !

    PS : A noter que je ne peux pas (et ne veux pas) utiliser des variables globales, le projet sur lequel je travaille ne le permettant pas...

  2. #2
    Membre expert
    Avatar de FremyCompany
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Points : 3 289
    Points
    3 289
    Par défaut
    c'est normal... quand tu fais ca, this=window... je sais c'est n'importe quoi, mais c'est comme ca... la manière la plus simple de contrer est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var x=this; setTimeout(function() {x.fnc();}, 1}
    Fremy
    Pour vos développements Web et une navigation agréable, le tout gratuit :
    1) IE 8 + IE7Pro (Si vous ne connaissez pas IE7Pro, essayez !)
    2) FF 3 + Web Developper Toolbar + AdBlockPlus + FireBug + GreaseMonkey

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2006
    Messages : 29
    Points : 25
    Points
    25
    Par défaut
    Mmm merci, bon a savoir !

Discussions similaires

  1. Sprite manager : utilisation avec des classes derivées de Sprite
    Par TheDrev dans le forum Développement 2D, 3D et Jeux
    Réponses: 10
    Dernier message: 14/05/2008, 21h53
  2. Manipuler avec des classes
    Par poussinphp dans le forum FMOD
    Réponses: 3
    Dernier message: 03/06/2006, 18h20
  3. [Librairies] Pb avec des classes d'envoi de mails
    Par sami_c dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 29/04/2006, 17h56
  4. Réponses: 9
    Dernier message: 25/09/2005, 16h33
  5. Réponses: 1
    Dernier message: 06/08/2003, 11h48

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