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 :

keyDown et POO


Sujet :

JavaScript

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 8
    Points : 6
    Points
    6
    Par défaut keyDown et POO
    Bonjour, j'ai un problème avec les events d'input au sein d'une classe. J'ai cru comprendre que ça créé une sorte pseudo-clone de la classe, mais comment modifier une variable de la classe à partir d'une fonction de cet event?
    (je sais pas si c'est bien clair ce que je dis )

    Enfin, un exemple vaut mieux qu'un long discourt.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    this.var = "canard";
    this.init = function(){
       self = this;
       document.onkeydown = function(event){self.keyDown(event);}
       setInterval(console.log(this.var),1000)
    }
     
    this.keyDown = function(event){
     
       this.var = "cochon";
       alert(this.var);
     
    }
    Ici la variable devient cochon uniquement dans la fonction appelé par le keyDown, comment la modifier "en dehors"?

    Merci.

  2. #2
    Membre émérite
    Avatar de Kaamo
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    1 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 165
    Points : 2 778
    Points
    2 778
    Par défaut
    Évite de nommer tes noms de propriétés d'objets par des mots clés réservés du langage (var ici).
    En faisant ça, l'objet global window va contenir une nouvelle propriété appelée var. Ok, c'est autorisé. Mais comment fais - tu pour l'utiliser, en tant que globale (vu que c'est l'idée dans ton code, sans sans passer par this (sous-entedu window)) ?
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    // PAS OK !!
    this.var = 5; // sous entendu window.var
    console.log(this.var); // 5
    console.log(window.var); // 5
    console.log(var); // erreur
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    // OKK !!
    this.foo = 5; // sous entendu window.foo
    console.log(this.foo); // 5
    console.log(window.foo); // 5
    console.log(foo); // 5
    Ceci dit, l'utilisation des globales n'est pas conseillée pour des soucis, entre autres, de collisions avec tes autres script JS (qu'ils soient créés par toi ou non). Pour ça, tu peux utiliser, par exemple, le module pattern qui a pour but de créer une sorte de namespace dont tu définis quelles méthodes, quelles variables sont utilisables dans le scope principal.

    Petite mise en appli :
    Code javascript : 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
    var monNameSpace = (function () {
      var maVarPrivee, keyDown;
     
      // Var Privée
      maVarPrivee = "canard";
     
      // Fonction Privée qui log maVarPrivee
      keyDown = function(){
        console.log(maVarPrivee);
      };
     
      // Retourne un objet ouvert au public qui est le seul à utiliser ses privées
      return {
        // Fonction Publique qui permet de changer la valeur de maVarPrivee
        setMaVarPrivee: function(foo){
          maVarPrivee = foo;
        },
     
        // Fonction Publique 
        init: function() {
          document.onkeydown = function(){keyDown();}
        }
      };
     
    })();
     
    monNameSpace.init(); // log "canard" au keydown
    Puis :
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    monNameSpace.setMaVarPrivee("cochon"); // on change la valeur. Au keydown, cochon sera bien affiché
    Ainsi, le véritable avantage est que tu ne peux pas accéder directement à tes variables et méthodes privées sans passer par l'objet monNameSpace retourné.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Ça marche merci de ta réponse.

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

Discussions similaires

  1. [POO] C'est quoi une classe en claire...???
    Par Spack dans le forum Langages de programmation
    Réponses: 5
    Dernier message: 26/01/2009, 15h53
  2. Réponses: 16
    Dernier message: 06/06/2007, 12h42
  3. [langage] Pb POO perl
    Par loothoof dans le forum Langage
    Réponses: 4
    Dernier message: 26/05/2004, 12h08
  4. CDialog KeyDown
    Par philippe V dans le forum MFC
    Réponses: 3
    Dernier message: 17/02/2004, 08h43
  5. lier un cube à un objet (POO)
    Par Hypnos dans le forum OpenGL
    Réponses: 12
    Dernier message: 26/08/2003, 21h46

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