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 :

portée de la variable this


Sujet :

JavaScript

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 80
    Par défaut portée de la variable this
    Bonjour,

    Je m'interroge sur la portée de la variable this dans les fonctions... Voici l'exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    function cProgramme (id) {
    	this.id = id;
     
    	this.createMarker = function (type) {
    		var nbTRA = this.taille(type);
    		var n_id = this.id;
    		GEvent.addListener(marker, 'click', function() {
    			infoWindowOpened='myclick('+n_id+', '+type+')';
    			marker.openInfoWindowHtml(t_js+'<div class="infobulle" id="info' +n_id+ '">'+t_HTML[0]+'</div>', { maxWidth: 400 });
    		});
    	}
    }
    ( vous reconnaitrez p-e l'utilisation de l'API googlemap, qui revient à dire que pour l'évenement onclick du marker il faut exécuter la fonction anonyme définie après )

    Donc : dans ma classe cProgramme j'ai bien défini this.id (locale)
    ensuite dans la 'fonction' (je devrais dire méthode) this.createMarker je peux utiliser cette variable this.id ! première interrogation, j'aurais cru devoir utiliser le mot clé 'parent' pour accéder à une variable de cProgramme dans sa fonction-méthode, mais non, this.id, ça marche.

    Bon... soit... alors je crée donc un évenement sur l'objet marker avec une fonction anonyme appelée sur le onclick, cette fonction elle ne reconnait plus du tout le this.id de cProgramme. Je suis donc obligé de la redéclarer :
    var n_id = this.id;
    dans createMarker, pour l'utiliser dans cette fonction... (d'ailleurs j'aurais peut etre du l'utiliser avec this.n_id non?)

    Quelqu'un peut m'expliquer? quelle est la portée de 'this'? et peut-on utiliser 'parent' en javascript et comment?
    merci

  2. #2
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Par défaut
    salut,
    la portée de this est un des pièges du javascript ^^
    mon conseil : déclare un objet "var obj = this" que tu utilises par la suite

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function cProgramme (id) {
    	this.id = id;
    var obj = this; 
    	this.createMarker = function (type) {
    		var nbTRA = obj.taille(type);
    		GEvent.addListener(marker, 'click', function() {
    			infoWindowOpened='myclick('+obj.id+', '+type+')';
    			marker.openInfoWindowHtml(t_js+'<div class="infobulle" id="info' +obj.id+ '">'+t_HTML[0]+'</div>', { maxWidth: 400 });
    		});
    	}
    }

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 80
    Par défaut
    merci du conseil, ça c'est cohérent en fait. le truc du this c'est quasiment un bug du langage, on pourrait au moins faire des langages cohérents les uns les autres.

    Pourquoi alors je devrais déclarer :
    this.createMarker = function (type) {
    au lieu de:
    obj.createMarker = function (type) {

    et est-ce que je peux utiliser 'parent' dans la fonction createMarker pour retrouver ma variable obj?

Discussions similaires

  1. [XSLT] pb portée d'une variable
    Par NPortmann dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 23/05/2006, 15h53
  2. [FOP] [ERROR] non-static variable this cannot be referenced from a static context
    Par cash3000 dans le forum API standards et tierces
    Réponses: 8
    Dernier message: 05/05/2006, 16h46
  3. Portée d'une variable globale
    Par Giill dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 27/12/2005, 10h13
  4. [MFC] Portée d'attributs/variables ?
    Par BaBeuH dans le forum MFC
    Réponses: 4
    Dernier message: 14/06/2005, 10h31
  5. [debutant][Portée] Déclaration de variable .....
    Par Slein dans le forum Langage
    Réponses: 4
    Dernier message: 07/05/2004, 10h43

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