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 :

méthode dans objet js


Sujet :

JavaScript

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2005
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2005
    Messages : 159
    Points : 108
    Points
    108
    Par défaut méthode dans objet js
    Bonjour à tous,

    Je bat depuis quelques jours avec des objets javascript et je bloque sur un point.

    J'ai une classe que j'ai défini de cette façon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    var Playlist = function() {
      this.start = function(){
        setTimeout("this.playNext()",10000);
      }
      this.playNext() = fonction(){}
    }
    En gros la fonction playNext() est exécutée 10s après start().
    Mais quand je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var maPlaylist = new Playlist();
    maPlaylist.start();
    J'ai une erreur comme quoi la fonction playNext() n'héxiste pas.

    Par contre, losque je défini ma classe de cette façon, ça marche (avec le nom de l'instance à la place de this dans le setTimeout) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    var Playlist = function() {
      this.start = function(){
        setTimeout("maPlaylist.playNext()",10000);
      }
      this.playNext() = fonction(){}
    }
    Sauf que je peux pas laisser le nom de l'instance dans la définition de la classe.

    Quelqu'un pourrait m'expliquer comment une méthode d'une classe peut en appeller une autre svp?

    Merci d'avance.

    Madis.

  2. #2
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Salut,
    this.start fait référence à une fonction anonyme, donc le contexte (this) de cette fonction est l'objet global, soit windows et non ta classe.
    Pour pallier à ça, on utilise habituellement une variable qui récupère l'objet représentant ta classe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    var Playlist = function() {
      var that = this;
      this.start = function(){
        setTimeout("that.playNext()",10000);
      }
      this.playNext() = fonction(){}
    }

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2005
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2005
    Messages : 159
    Points : 108
    Points
    108
    Par défaut
    Merci pour ta réponse.

    ça me dit que that n'est pas définit.

    C'est bizarre car si juste avant le setTimeout je met un alert(that.id), ça m'affiche la même valeur que this.id, donc that est bien définit en théorie...

  4. #4
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    setTimeout(function(){
        that.playNext()
    },10000);

  5. #5
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2005
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2005
    Messages : 159
    Points : 108
    Points
    108
    Par défaut
    Merci, c'est nickel ça marche !!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 21
    Dernier message: 03/06/2010, 18h26
  2. [objet] appeler une méthode d'objets contenus dans un tableau (iterator ?)
    Par psychomatt dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 21/09/2006, 16h28
  3. Ajouter un méthode à un objet
    Par norvel dans le forum Access
    Réponses: 2
    Dernier message: 03/10/2005, 16h50
  4. Réponses: 4
    Dernier message: 27/06/2005, 19h26
  5. Renvoyer un type structuré dans objet OLE
    Par Bleuarff dans le forum API, COM et SDKs
    Réponses: 6
    Dernier message: 13/05/2005, 20h05

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