Bonjour le monde,
Actuellement je créer un petit timer pour youtuber et je me heurte à un petit problème je n'arrive pas à faire un setTimeout de ma fonction sachant que je construit mon timer sous forme d'objet .

Voici mon code :

function Timer() {

        this.now = new Date();
        this.launch = new Date(2012,11,25,01,00,00);
        this.name = name ;
        this.countDown = function countDown(){
            var now = Timer.now;
            var s = (Timer.launch.getTime() - now.getTime())/1000 ;
            var d = Math.floor(s/86400) ;//24*60*60
            document.getElementById('day').innerHTML = d +':';
            s -= d*86400;
            var h = Math.floor(s/3600) ;//60*60
            document.getElementById('hour').innerHTML = 
            ((h <= 9) ? '0' :'' ) + h +':';
            s -= h*3600;
            var m = Math.floor(s/60);
            document.getElementById('minute').innerHTML = ((m <= 9) ? '0' :'' ) +m + ':';
            s -= m*60;
            s = Math.floor(s);
            document.getElementById('second').innerHTML = ((s <= 9) ? '0' :'' ) +s;            
            setTimeout(' name.countDown',1000);
      };
 }
    var Timer = new Timer();
        Timer.countDown();
 air.introspector;

4 réponses


s4p
Réponse acceptée
function Timer() {
            var obj = this;
            this.now = new Date();
            this.launch = new Date(2012,11,25,01,00,00);
            this.name = name ;
            this.countDown = function countDown(){
                var now = new Date();
                var s = (Timer.launch.getTime() - now.getTime())/1000 ;
                var d = Math.floor(s/86400) ;//24*60*60
                document.getElementById('day').innerHTML = d +':';
                s -= d*86400;
                var h = Math.floor(s/3600) ;//60*60
                document.getElementById('hour').innerHTML = 
                ((h <= 9) ? '0' :'' ) + h +':';
                s -= h*3600;
                var m = Math.floor(s/60);
                document.getElementById('minute').innerHTML = ((m <= 9) ? '0' :'' ) +m + ':';
                s -= m*60;
                s = Math.floor(s);
                document.getElementById('second').innerHTML = ((s <= 9) ? '0' :'' ) +s;            
                setTimeout(function(){ obj.countDown(); }, 1000);
            };
        }

J'ai remplacé 'var now = Timer.now;' par 'var now = new Date();'
Timer.now ne change jamais car il est affecté à l'instanciation de l'objet

J'ai aussi déclaré var obj = this; au début de la fonction Timer pour avoir accès à this qui fait référence à Timer dans countDown (où this fait cette fois référence à countDown)
ce qui donne ensuite pour le timeout :

setTimeout(function(){ obj.countDown(); }, 1000);

Donc modifications ligne 2, 7 et 23.

Au passage qu'est-ce que air.introspector; ?

JowRick
Auteur

En fait développe ce script pour une application avec adobe AIR

Et ça permet quoi ?
Question résolue ?

JowRick
Auteur

leur site t'expliquera mieux que moi et merci de m'avoir aidé le pire c'est que je n'étais pas loin de trouver