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 :

[POO] setTimeout qui appelle fonction de ma classe


Sujet :

JavaScript

  1. #1
    Membre émérite Avatar de Jérémy Lefevre
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2004
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 898
    Par défaut [POO] setTimeout qui appelle fonction de ma classe
    Bonjour à tous,
    J'ai une petite classe en Javascript avec une fonction qui appele setTimeout,
    Mon probleme est que j'appele une fonction membre de ma classe dans setTimeout

    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
     
        this.init = function(timeLimit)
        {
            this._timer=this._timer+1;
            tmp=(this._timer*60)/100;
            document.getElementById("statusCount").innerHTML=this._timer;
     
            if(this._timer!=timeLimit)
            {
                if(this._isJava=="false")
                    setTimeout("this.changeJava("+timeLimit+")",1000);
                else
                    return true;
            }
            else
            {
                if(this._timer==timeLimit && this._isJava=="false")
                    return false;
                else
                    alert("xxx");
            }
        }
    j'obtiens cette erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Erreur : this.changeJava is not a function
    Fichier source : file:///D:/www/webphone.2.5/Java.class.js
    Ligne : 24
    Si quelqu'un sais pourquoi j'ai cette erreur ....

  2. #2
    Membre averti
    Inscrit en
    Novembre 2006
    Messages
    44
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Novembre 2006
    Messages : 44
    Par défaut
    C'est pas un probleme de guillemets?

  3. #3
    Membre émérite Avatar de Jérémy Lefevre
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2004
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 898
    Par défaut
    Salut,
    Non rien à voir avec les guillemets !

  4. #4
    Expert confirmé
    Avatar de le_chomeur
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    3 653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 3 653
    Par défaut
    Salut
    pour utiliser un timeout a l'intérieur d'un objet , tu dois le "dupliquer" avant de l'appeler ou alors utiliser un pointeur exemple :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    // tu déclares une variable globale
    var nom_of_My_Obj = 0;
     
    //tu initialise une variable par exemple this.MyObj dans ton objet 
     
     
    nom_of_My_Obj ++;                   // incrémentation du nombre d'objet
    this.MyObj = "MyObj" + nom_of_My_Obj;   // tu l'affecte à ta variable objet
    eval( this.MyObj +"=this");         // on effectue une évaluation :) puis tu réaffecte ta variable nouvellement créer comme étant ton objet reaffectation 
     
    //et enfin tu appel ta méthode avec en paramètre le pointeur ( qui est en fait une propriété de l'objet qui est l'objet lui même ( j'espère avoir été clair ^^ )
    this._timer = setTimeout( this.MyObj+".changeJava("+timeLimit+")", 1000);
    Voila voila

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

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Par défaut
    Oula, le_chaumeur, ta méthode marche mais bon, c'est très très lourd pour rien...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    // Dans une fonction où this existe
        var This = this; 
        // Sans arguments
        setTimeout(This.maMethode, 1000);
        // Avec arguments
        setTimeout(function() { This.maMethode(true, 0, 'abc'); }, 1000)
    Pour généraliser :
    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
    Function.prototype.createDelegate(obj,args) {
       var This = this; args=args||[];
       return function() {
         var newArgs = new Array();
         for (var i=0; i<args.length; i++) { newArgs.push(args[i]); }
         for (var i=0; i<arguments.length; i++) { newArgs.push(arguments[i]); }
         return This.apply(obj, newArgs);
       };
    }
     
    // Plus tard; Dans une fonction où this existe
    setTimeout(this.maMethode.createDelegate(this, [true, 0, 'abc']), 1000)
    // Ou alors
    var f = this.maMethode.createDelegate(this)
    setTimeout(function() { f(true, 0, 'abc'); }, 1000)
    // Ou encore
    var f = this.maMethode.createDelegate(this, [true, 0])
    setTimeout(function() { f('abc'); }, 1000)
    // Ceci marche aussi
    document.body.onmousedown=this.maMethode.createDelegate(this);

  6. #6
    Expert confirmé
    Avatar de le_chomeur
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    3 653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 3 653
    Par défaut
    Oui je sais mais si tu utilises plusieurs objet , la variable ne pointeras plus sur le bon objet ...
    en utilisant ma méthodes, tu pointes vers le bon obligatoirement

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

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Par défaut
    Pas du tout.

    Ma méthode fonctionne indéfiniment pour un nombre infini d'objets, sans aucun risque de dysfonctionnement ou de remplacement de données, dans la mesure bien sûr où ceux-ci peuvent être stockés dans la mémoire RAM du PC

    Une variable "var" déclarée dan une fonction n'est définie que dans le cadre de la fonction, et n'est pas remplacée à chaque appel de la fonction, vu que chaque appel crée un nouveau contexte de fonction. Tu peux tester si tu veux

    Bon, il faut aussi que this existe, sinon cela ne marche pas
    Je vais le préciser dans mon post premier

  8. #8
    Expert confirmé
    Avatar de le_chomeur
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    3 653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 3 653
    Par défaut
    yop je sais, en fait j'avais fait ma remarque par rapport a la non déclaration de ta variable^^

Discussions similaires

  1. Réponses: 8
    Dernier message: 13/03/2014, 11h24
  2. [PHP 5.3] Appel fonction d'une classe et tableau
    Par ETVigan dans le forum Langage
    Réponses: 2
    Dernier message: 30/12/2010, 16h00
  3. Appel fonction d'une classe dans une autre classe
    Par Snake-Eyes dans le forum C++
    Réponses: 3
    Dernier message: 05/05/2010, 16h46
  4. Réponses: 1
    Dernier message: 25/10/2007, 18h04
  5. Appel fonction d'une classe
    Par totoche dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 26/02/2007, 15h56

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