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] Problème lors de l'appel d'une propriété d'un objet.


Sujet :

JavaScript

  1. #1
    Membre habitué Avatar de akecoocoo
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2004
    Messages : 78
    Points : 146
    Points
    146
    Par défaut [POO] Problème lors de l'appel d'une propriété d'un objet.
    Voici un petit bout de code qui est je pense assez clair :

    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 Souris() {
    	this.X = 0;
    }
     
    var souris = new Souris();
     
    souris.Init = function(e) {
    	this.X = e.x;
    }
     
    souris.mousedown = function(e) {
    	if (!e) e = window.event;
    	alert(e.x);             // Retourne le bon chiffre
    	souris.Init(e);        // Initialise l'objet
    	alert(this.X);         // Erreur :(
    	alert(souris.X); // Bonne valeur
    }
     
    document.onmousedown = souris.mousedown;
    Savez vous pourquoi l'emploi de this ne fonctionne pas dans ce cas précis ?

  2. #2
    Membre averti
    Avatar de Strab
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    338
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 338
    Points : 330
    Points
    330
    Par défaut
    Je ne suis pas expert avec le pseudo-objet de javascript, mais je pense que l'emploi de this fait que mousedown est un objet avec une propriété X, comme dans Souris().

    Ce n'est qu'une idée...

    Strab

  3. #3
    Expert éminent

    Avatar de denisC
    Profil pro
    Développeur Java
    Inscrit en
    Février 2005
    Messages
    4 050
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 4 050
    Points : 7 641
    Points
    7 641
    Par défaut
    this se rapporte à priori à l'objet courant, à savoir la fonction que tu es en train d'ecrire (mousedown par exemple) et non pas l'objet qui est relié à cette méthode. Pour passer outre ce fait, et faire de la POO en JS, il faut utiliser le prototype

    A priori, pour faire de l'objet en JS:
    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 Souris() { 
       this.X = 0; 
    } 
     
    Souris.prototype.Init = function(e) { 
       this.X = e.x; 
    } 
     
    Souris.prototype.mousedown = function(e) { 
       if (!e) e = window.event; 
       alert(e.x);
       this.Init(e);
       alert(this.X);
       alert(souris.X);
    } 
     
    var souris = new Souris(); 
     
    document.onmousedown = souris.mousedown;
    A voir si ça fonctionne mieux comme ça

  4. #4
    Expert éminent

    Avatar de denisC
    Profil pro
    Développeur Java
    Inscrit en
    Février 2005
    Messages
    4 050
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 4 050
    Points : 7 641
    Points
    7 641
    Par défaut
    Après vérifications et recherches ne ma part, ça ne fonctionne toujours pas.

    Alors, en fait, la programmation objet se fait bien comme je l'ai montré dans mon post précédent, mais il y a des subtilité avec this.... En effet, quand tu fais un
    document.onmousedown = souris.mousedown;
    Il copie ta fonction mousedown dans l'objet document, et donc quand tu fais un this dans la fonction mousedown, cela refere au document, d'où les erreurs....

    Et pour en venir a bout:
    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     
    <html>
    <head>
    <script type='text/javascript'>
     
    function Souris() {
       this.X = 0;
    };
     
    Souris.prototype.mousedown = function(e) {
        var posx = 0;
        var posy = 0;
        if (!e) var e = window.event;
        if (e.pageX || e.pageY) {
            posx = e.pageX;
            posy = e.pageY;
        }
        else if (e.clientX || e.clientY) {
            posx = e.clientX + document.body.scrollLeft;
            posy = e.clientY + document.body.scrollTop;
        }
       alert("position evenement : " + posx);
       this.setPosition(posx);
       alert("position this : " + this.X);
       alert("position souris : " + souris.X);
    };
     
    Souris.prototype.setPosition = function(posx) {
       this.X = posx;
    };
     
    var souris = new Souris();
     
    document.onclick = function(e){souris.mousedown(e)};
    </script>
    </head>
    <body>
    <div id='aa'>aaa</div>
    </body>
     
    </html>
    (j'ai un peu raffiné le code pour la compatibilité IE/FF)

    Donc dans le cas ci dessus, c'est la fonction anonyme qui est affectée à document, et la fonction mousedown reste bien propriété de l'instance souris, de la classe Souris. Et comme ça, tout marche

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

Discussions similaires

  1. problème lors de l'appel d'une méthode
    Par sfaxian dans le forum VB.NET
    Réponses: 9
    Dernier message: 10/07/2009, 14h39
  2. Problème lors de l'appel d'une fonction Tsql
    Par mobscene dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 23/07/2007, 15h56
  3. [MySQL] problème lors de l'appel d'une fonction
    Par jexl dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 27/06/2007, 09h53
  4. POO Trap lors de l'appel d'une méthode
    Par QAYS dans le forum Delphi
    Réponses: 3
    Dernier message: 05/06/2007, 21h22
  5. Problème lors de l'appel d'une procédure stockée
    Par ToxiZz dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 21/05/2006, 23h42

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