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 :

Question POO closures


Sujet :

JavaScript

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    octobre 2012
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Secteur : Bâtiment

    Informations forums :
    Inscription : octobre 2012
    Messages : 23
    Points : 31
    Points
    31
    Par défaut Question POO closures
    Bonjour,
    J'ai lu pas mal de documentation sur les fonctions JS utilisées comme des classes. J'ai besoin d'un petit éclairage sur les closures:
    Est que ces codes produisent le même objet:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function MaClass(){
     this.int = 10;
     this.methode = function(){
      alert(this.int);
     };
    }
    2e code avec closures:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    function MaClass(){
     var int = 10;
     return {
      methode: function(){
       alert(int);
      }
     };
    }
    Il me semble que le résultat est le même à la différence que int dans la première version est publique et privé dans la 2e version.
    Suis-je dans le juste ?

  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 : 34
    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
    Tu le sais peut-être mais il n'y a pas de "classes" en javascript telles qu'on les connait. Mais comme tu le fais remarquer, il y a plusieurs façons de créer des objets, en l’occurrence en passant par les fonctions qui "simulent" le comportement des classes.

    Pour répondre à la question, non, cela ne produit pas le même objet.

    Pour le premier code, si tu exécutes la fonction telle quelle est définit : MaClass(); // this sera alors assimilé à window
    Cela va :
    - Attacher une variable nommée "int" à l'objet global window
    - Attacher une fonction nommée 'méthode" à l'objet global window
    => donc aucun objet n'est créé

    Toujours pour ce premier code, si tu crées un objet à partir de cette fonction en utilisant le mot clé new : var monObjet = new MaClass();
    Cela va créer un objet en utilisant le prototype de la fonction. On dit alors que c'est un objet d'instance de "MaClass" elle même instance d'un Objet/
    - L'objet contiendra donc deux propriétés : La première sera un Number appelé int et qui vaudra 10. La seconde une Function appelée methode
    - Aura un constructeur d'instance MaClass
    - Attacher cet objet à l'objet window

    Pour le second code, la fonction retourne un objet directement construit à partir de l'objet de base "Object".
    Cet objet ne contient que la méthode "methode" qui alert(10) car int, au moment de son instanciation, a été "fermé" avec la valeur 10.
    En effet, var int = 10 n'est visible que dans la fonction MaClass et peut donc être considéré comme "privé" même si c'est un abus de langage car il n'y a pas ce genre de notions en Javascript, bien qu'elles peuvent être plus ou moins simulées.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    octobre 2012
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Secteur : Bâtiment

    Informations forums :
    Inscription : octobre 2012
    Messages : 23
    Points : 31
    Points
    31
    Par défaut
    Merci beaucoup pour cette réponse précise.

    Je comprends mieux la raison pour laquel on ne trouve pas la 1er solution dans les tutos: elle n'est pas "propre" (création d'objets inutils dans window).

    C'est un peu plus claire pour moi.

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

Discussions similaires

  1. Template de liste, question POO
    Par losformen dans le forum C#
    Réponses: 5
    Dernier message: 23/03/2011, 10h18
  2. Question POO, états globaux
    Par Gruik dans le forum Langages de programmation
    Réponses: 2
    Dernier message: 06/02/2010, 19h25
  3. [Templates] Quelques questions POO/Template
    Par iwf-fr dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 27/04/2007, 17h04
  4. Question Poo en delphi
    Par the big ben 5 dans le forum Delphi
    Réponses: 6
    Dernier message: 03/11/2006, 11h25
  5. [POO] Question POO
    Par shadeoner dans le forum Langage
    Réponses: 1
    Dernier message: 10/04/2006, 15h51

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