Setinterval, settimeout et class objet

Soyez le premier à donner votre avis sur cette source.

Vue 9 638 fois - Téléchargée 556 fois

Description

Source sous forme de TUTO
Comment résoudre le problème lié à setInterval ou setTimeout lorsque l'appel fait référence à la fonction d'un objet...
du style
this.Timer = setInterval( "this.Fonction()", this.Delai);
ou
this.Timer = setTimeout( "this.Fonction()", this.Delai);

La mise en application du code qui suit reléve d'un niveau débutant++ même si les explications s'approchent d'un niveau initié--

Conclusion :


Il aurait été plus judicieux de livré cela sous forme de TUTORIAL mais c'est plus aisé a réaliser cela sous forme de code.

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

PetoleTeam
Messages postés
3426
Date d'inscription
lundi 26 décembre 2005
Statut
Membre
Dernière intervention
14 janvier 2011
10 -
Bonjour,
J'ai essayé de répondre clairement?

J'ai finalement décidé d'écrire ce SOURCE TUTO suite aux problèmes rencontrés par les codeurs sur pas mal de Forum, et il a bien évolué en fonction des différents cas rencontrés le but étant d'essayer d'en faire une synthèse claire et accessible au plus grand nombre.

Je suis, donc, resté volontairement hors function anonyme, que j'utilise d'ailleurs peu, pour des raisons de clarté de code, pour ne pas ajouter au trouble, le problème étant pour moi au départ ailleurs.

Comme je l'annonce dans les conclusions, bien peu exhaustive, de l'index.htm
"Je ne doute pas qu'il existe d'autres façons de résoudre ce problème..."

En ce qui concerne "le plus simple pour faire la même chose" je reste dans l'expectative?

Passage de la fonction par string ou par pointeur la ne devait pas être la question, bien que la solution 2BIS passe la fonction par pointeur en fait et est très proche de la fonction anonyme dans par son mécanisme, enfin me semble t-il.

Sur le plan de la vitesse :
A l'époque sur mon 486SX la question ne se posait même pas le passage par pointeur n'étant encore pas d'actualité et je n'ai pas de bille, actuellement, pour le tester sauf à savoir qu'il y a transformation d'une chaîne en pointeur avant exécution de la fonction donc fatalement des temps horloge en plus, mais en contre partie, dans ta méthode, il y a affectation d'un variable avant appel puis création d'une fonction, donc sans info sur la manière dont traite cela les navigateurs je ne saurais répondre avec certitude.
Il faudrait pour bien faire analyser le code généré par les différents navigateurs à la lecture des SCRIPTs.

Seule certitude les fonctions crées avec le constructeur Function, new Function( blabla..., sont évaluées à chaque appel, donc en terme de vitesse à éviter autant que faire ce peu.

Si j'avais réalisé un TUTORIAL exhaustif, ou presque, il est vrai qu'il aurait été impensable de ne pas parler de ton exemple et de la méthode par function anonyme.

Merci pour ton commentaire qui m?a permis de prendre un peu de recul.
;0)
ralecul
Messages postés
112
Date d'inscription
dimanche 23 mars 2003
Statut
Membre
Dernière intervention
1 août 2008
-
Salut,

Il y a tout de même beaucoup plus simple pour faire la même chose (ou alors j'ai mal compris :-)

Voila comment je fais :

function Objet_Start(){
this.Stop(); // On arrete d'abord
this.Show(); // On montre ensuite
//-- Appel de la fonction
var localThis = this;
this.Timer = setInterval(function(){localThis.Show()}, localThis.Delai);
}

En gros j'utilise la méthode de l'exemple 2 avec une variable locale !

Sinon une remarque : il vaut mieux utiliser une fonction anonyme que de donner le nom de la fonction sous forme de chaine de caractere (en paramètre à setInterval), normalement c'est plus rapide...

J'ai utilisé cette astuce pour réaliser la version OO de mon afficheur de panorama 360° : Yajev.
(Mais il est vrai que je n'avais pas souligné que j'avais rencontré ce problème moi aussi...)

Au fait bravo pour le tuto en html : c'est la classe !

@+

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.