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 :

D�clarer une variable static


Sujet :

JavaScript

  1. #1
    Membre �clair� Avatar de Pecose
    Homme Profil pro
    Batiment
    Inscrit en
    F�vrier 2013
    Messages
    311
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 38
    Localisation : France, Alpes Maritimes (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : Batiment
    Secteur : B�timent

    Informations forums :
    Inscription : F�vrier 2013
    Messages : 311
    Par d�faut D�clarer une variable static
    Bonjour,

    J'ai du mal � comprendre comment faire une variable static.
    J'ai essayer:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    $('#bouton').click(function(){
       Test.setTest("test");
       alert(Test.getTest);
    });
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    class Test{
       Test.ok ="";
       static get getTest(){ return Test.ok; }
       static set setTest(data){ Test.ok = data; }
    }
    Ca ne marche pas.
    Une id�e?

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 910
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 910
    Par d�faut
    Citation Envoy� par Pecose Voir le message
    Une id�e?
    Mon id�e serait celle-ci pour l'instant :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    class Test {    
     
        static get ok() {
            return this._ok;
        }
        static set ok(data) {
            this._ok = data;
        }
    }
    Test.ok = "test";
    console.log(Test.ok); 
    alert(Test.ok);

  3. #3
    Membre �clair� Avatar de Pecose
    Homme Profil pro
    Batiment
    Inscrit en
    F�vrier 2013
    Messages
    311
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 38
    Localisation : France, Alpes Maritimes (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : Batiment
    Secteur : B�timent

    Informations forums :
    Inscription : F�vrier 2013
    Messages : 311
    Par d�faut
    Merci Beginner.
    Du coup j'ai une autre question.
    J'ai fait �a:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    class Test{}
    Test.ko = "Language de mer et des poissons";
    alert(Test.ko);
    Ca marche...
    Alors � quoi servent les getters et les setters dans ce language?

  4. #4
    R�dacteur

    Avatar de danielhagnoul
    Homme Profil pro
    �tudiant perp�tuel
    Inscrit en
    F�vrier 2009
    Messages
    6 389
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 75
    Localisation : Belgique

    Informations professionnelles :
    Activit� : �tudiant perp�tuel
    Secteur : Enseignement

    Informations forums :
    Inscription : F�vrier 2009
    Messages : 6 389
    Billets dans le blog
    125
    Par d�faut


    Ne confondez pas une class avec un object de cette class.

    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
    window.addEventListener('load', ev => {
        // le DOM est construit et la page web est visible
     
        // début code du test
     
        class Test {
            constructor(p1) {
                this.ok = String(p1) || "agir";
                Test.action = this.ok;
            }
     
            // un get/set ajoute un nouvelle propriété qui doit être nomée
     
            static get action() {
                return this.ok;
            }
            static set action(value) {
                this.ok = String(value);
            }
        }
     
        Test.ko = "Language de mer et des poissons";
     
        // ne confondez pas une class avec un object de cette class
     
        let oMonTest = new Test('parcourir');
     
        console.log(`ok = ${ oMonTest.ok }`); // parcourir
        console.log(`Test.action = ${ Test.action }`); // parcourir
     
        console.log(`ko = ${ oMonTest.ko }`); // undefined ! n'existe pas dans l'objet.
     
     
        // fin code du test
     
    }, {
        capture: false,
        passive: true,
        once: false
    });

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues � un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  5. #5
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 910
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 910
    Par d�faut
    Citation Envoy� par Pecose Voir le message
    Ca marche...
    Alors � quoi servent les getters et les setters dans ce language?
    Oui effectivement les deux mani�res fonctionnent et c'est vrai que dans ce cas simple on ne voit pas trop l�int�r�t d'utiliser des getters/setters... Mais il y a bien une diff�rence dans un cas on a une simple affectation et dans l'autre on a une fonction qui est ex�cut�e.

    C'est-�-dire dans ton exemple quand on fait Test.ko = "Language de mer et des poissons"; on a une simple affectation et dans l'autre cas la fonction set ok sera ex�cut�e... Alors si cette fonction ne fait que retourn�e une valeur alors il n'y a pas beaucoup d�int�r�t (pas beaucoup de diff�rence avec une simple affectation)...

    Maintenant supposons que tu veuilles qu'il y ait plus qu'une simple affectation, tu veux qu'� chaque fois un traitement particulier soit effectuer alors tu pourras ajouter ce traitement dans la fonction set ok...

    Exemple tout b�te : si tu voulais que seuls les 11 premiers caract�res de la chaine soit affect�s � la propri�t� ok eh bien tu pourrais ajouter cette fonctionnalit� dans la fonction...

    Les getters/setters cela permet de prot�ger les donn�es contre un �ventuel mauvais usage qu'on pourrait en faire, d'une mani�re g�n�rale tu peux vouloir emp�cher qu'on affecte n'importe quoi n'importe comment quelque chose � ta propri�t� ce qui pourrait provoquer un dysfonctionnent (un fonctionnement non voulu).

    D'autres membres donneront peut-�tre une meilleure explication...

  6. #6
    Membre �clair� Avatar de Pecose
    Homme Profil pro
    Batiment
    Inscrit en
    F�vrier 2013
    Messages
    311
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 38
    Localisation : France, Alpes Maritimes (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : Batiment
    Secteur : B�timent

    Informations forums :
    Inscription : F�vrier 2013
    Messages : 311
    Par d�faut
    D'accord, merci danielhagnoul,

    Je comprend bien que du fait que tu appel une valeur qui appartient uniquement � la classe, depuis l'objet, �a pose un petit probl�me.
    Mais je ne comprend pas tr�s bien en quoi cela d�montre que les setters et getters sont utiles.
    Je suis peut �tre pas tr�s clair alors voila un autre exemple:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    class Test{
        static get ko(){ return this.ok; }
        static set ko(data){ this.ok = data; }
    }
    var test = new Test();
    test.ko = "ko";
    test.ok = "ok";
    alert(test.ko + test.ok)
    Dans ce code tout fonctionne.
    Dans ce cas, pourquoi je m'emb�te � faire des get/set.
    C'est m�me pas utile visuellement. Si il fallait �crire : "test.getOK();" pour que ca fonctionne, l� ok, puisque ca se voit.
    Mais l� c'est quoi l�int�r�t?

  7. #7
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 910
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 910
    Par d�faut
    Citation Envoy� par Pecose Voir le message
    Dans ce code tout fonctionne.
    Dans ce cas, pourquoi je m'emb�te � faire des get/set.
    J'ai donn� une petite explication dans mon message pr�c�dent...

    Et pour ton nouvel exemple il faut faire attention au fait que test.ko et Test.ko sont deux propri�t�s diff�rentes...

  8. #8
    R�dacteur

    Avatar de danielhagnoul
    Homme Profil pro
    �tudiant perp�tuel
    Inscrit en
    F�vrier 2009
    Messages
    6 389
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 75
    Localisation : Belgique

    Informations professionnelles :
    Activit� : �tudiant perp�tuel
    Secteur : Enseignement

    Informations forums :
    Inscription : F�vrier 2009
    Messages : 6 389
    Billets dans le blog
    125
    Par d�faut
    Dans un exemple simpliste, il n'y a pas de diff�rence entre une propri�t� classique et une propri�t� g�n�r�e par un get/set. Mais n'oubliez pas que le get et le set peuvent contenir un code JS aussi complexe que souhaiter.

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues � un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  9. #9
    Membre �clair� Avatar de Pecose
    Homme Profil pro
    Batiment
    Inscrit en
    F�vrier 2013
    Messages
    311
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 38
    Localisation : France, Alpes Maritimes (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : Batiment
    Secteur : B�timent

    Informations forums :
    Inscription : F�vrier 2013
    Messages : 311
    Par d�faut
    Citation Envoy� par Beginner. Voir le message
    J'ai donn� une petite explication dans mon message pr�c�dent...
    Merci Beginner. je n'avais pas vu ton message.
    Citation Envoy� par Beginner. Voir le message
    Maintenant supposons que tu veuilles qu'il y ait plus qu'une simple affectation, tu veux qu'� chaque fois un traitement particulier soit effectuer alors tu pourras ajouter ce traitement dans la fonction set ok...
    Ok mais dans ce cas c'est peut �tre pas tr�s lisible d'utiliser un set plut�t qu'une m�thode lambda.
    Par contre, ca donne acc�s � un genre de mini polymorphisme qui j'en suis sur g�n�re un maximum de confusion et d�erreurs.
    Bon apr�s de mon point de vu de d�butant un peu v�n�re, n'importe quoi dans ce langage g�n�re un maximum de confusion et d�erreurs.

    En tout cas merci beaucoup pour vos explications.

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. [WD14] d�clarer une variable static
    Par Mut dans le forum WinDev
    R�ponses: 3
    Dernier message: 06/09/2012, 13h35
  2. [Variable] D�clarer une variable avec un nom dynamique
    Par jacquesh dans le forum G�n�ral JavaScript
    R�ponses: 4
    Dernier message: 10/02/2006, 14h11
  3. R�ponses: 5
    Dernier message: 20/09/2005, 22h48
  4. [VB6]Initialiser une variable Static dans un �venement
    Par loverdose dans le forum VB 6 et ant�rieur
    R�ponses: 16
    Dernier message: 20/01/2005, 14h57
  5. [h�ritage] h�ritage d'une variable static
    Par yaya44 dans le forum Langage
    R�ponses: 14
    Dernier message: 29/09/2004, 13h36

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