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

jQuery Discussion :

Portée des méthodes d'un objet


Sujet :

jQuery

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 23
    Points : 22
    Points
    22
    Par défaut Portée des méthodes d'un objet
    Bonjour,

    Je ne sais pas trop comment expliquer mon problème avec des mots alors je donne un exemple pour que ce soit plus clair:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    MyObject.prototype = {
    		firstMethod: function(elements){
    			jQuery(elements).click(function(){
    				secondMethod(this);
    			});
    		},
    		secondMethod: function(element){
    			alert('hello');
    		}
    	}
    La fonction exécutée lors d'un clic n'a pas accès à la seconde méthode de MyObject:
    secondMethod is not defined
    [Break on this error] secondMethod(this);\n
    Comment faire en sorte que la fonction éxécutée lors d'un clic puisse avoir accès à la seconde méthode de l'objet tout en récupérant l'élément qui a été cliqué(this)?

    J'espère avoir été clair. Si ce n'est pas le cas, n'hésitez pas à me poser des questions.

    Merci, A+

  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.

    C'est un grand classique
    this représente l'objet appelant.
    Dans le cadre de ta 1re méthode, tu appelles une fonction anonyme qui est appelée par l'objet HTML sur lequel tu as cliqué... et qui ne possède donc pas de méthode secondMethod.
    Un moyen habituel de contourner cela consiste à créer une variable référençant le this d'origine :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    MyObject.prototype = {
    	var that = this;
    	firstMethod: function(elements){
    		jQuery(elements).click(function(){
    			secondMethod(that);
    		});
    	},
    	secondMethod: function(element){
    		alert('hello');
    	}
    }
    Et en plus, comme that est une référence à this, les modifications apportées à this sont répercutées sur that !

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 23
    Points : 22
    Points
    22
    Par défaut
    Merci pour ta réponse Bovino.

    J'ai essayé avec le code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    MyObject.prototype = {
    		firstMethod: function(elements){
    			var that = this;
    			jQuery(elements).click(function(){
    				that.secondMethod(this);
    			});
    		},
    		secondMethod: function(element){
    			alert('hello');
    		}
    	};
    J'obtiens une erreur sur le fichier jquery:

    this.parentNode is null
    (function(){var l=this,g,y=l.jQuery,p=l....each(function(){o.dequeue(this,E)})}});
    secondMethod(that) comme tu m'as indiqué ne me convient pas car je veux appliquer une méthode de l'objet avec comme paramètre l'élément cliqué.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 23
    Points : 22
    Points
    22
    Par défaut
    Mais ça marche malgré l'erreur.

    Merci

  5. #5
    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
    that.secondMethod($(this));

Discussions similaires

  1. Portées des propriétés-Relations entre objets
    Par Marmounet dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 25/09/2008, 10h40
  2. ClassForName mais pour des méthodes d'un objet
    Par Shogun dans le forum Langage
    Réponses: 3
    Dernier message: 25/08/2006, 08h32
  3. [PHPTAL] gestion des méthodes des Objets
    Par ronio dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 06/03/2006, 14h29
  4. [FLASH 8] Question sur la portée des objets.
    Par i_shinji dans le forum Flash
    Réponses: 1
    Dernier message: 02/11/2005, 17h18

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