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 :

Accès méthode publique depuis méhtode privée


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    lvr
    lvr est déconnecté
    Membre éclairé Avatar de lvr
    Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Avril 2006
    Messages
    919
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Avril 2006
    Messages : 919
    Par défaut Accès méthode publique depuis méhtode privée
    Bonjour,

    J'essaye d'accéder depuis des méthodes privées des méthodes publiques et je reçois toujours un "Uncaught ReferenceError: resize is not defined" au niveau de l'appel de ma fonction autoinit.

    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    var Pages = function() {
        var autoinit = function() {
            resize(true);
        }(); // auto-init
     
        return {
            resize: function(force) {
                console.log("resize requested");
            }
        };
    };
     
    pages=new Pages();

    Quelle est la solution ?
    J'ai bien pensé à
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    var Pages = function() {
        var autoinit = function() {
            _resize(true);
        }(); // auto-init
     
        _resize: function(force) {
            console.log("resize requested");
        }
        return {
            resize: _resize;
        }
        };
    };
    mais bon si je dois faire ça pour tes méthodes publiques potentiellement appelables depuis une méthode privées

  2. #2
    lvr
    lvr est déconnecté
    Membre éclairé Avatar de lvr
    Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Avril 2006
    Messages
    919
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Avril 2006
    Messages : 919
    Par défaut
    J'ai aussi essayé avec un "me." masi sans résultat

    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    var Pages = function() {
        var me=this;
        var autoinit = function() {
            me.resize(true);
        }(); // auto-init
     
        return {
            resize: function(force) {
                console.log("resize requested");
            }
        };
    };

    D'ailleurs j'ai vraiement du mal à voir quand utiliser un "me" (pointant vers "this")...

  3. #3
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Il s'agit avant tout d'une mauvaise compréhension du modèle objet de JavaScript qui est pas prototype et non par classes.

    Ce que tu essayes de créer est un constructeur et un constructeur sert à définir des propriétés et méthodes en les attachant à this, il n'est donc pas supposé renvoyer de valeur.

    D'autre part, tu écris bien que Pages() est une fonction, la notation resize: function(){...} n'a donc pas lieu d'être puisqu'elle est réservée à la définition d'un objet.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    var Pages = function() {
        this.resize = function(force) {
            console.log("resize requested");
        };
        this.resize();
    };
     
    pages=new Pages();
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  4. #4
    lvr
    lvr est déconnecté
    Membre éclairé Avatar de lvr
    Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Avril 2006
    Messages
    919
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Avril 2006
    Messages : 919
    Par défaut
    Le problème si j'écris ça comme ça, c'est que mon function "resize" n'est plus publique et que donc un
    foire maintenant !

    Il s'agit avant tout d'une mauvaise compréhension du modèle objet de JavaScript qui est pas prototype et non par classes.
    Effectivement, j'arrive pas à capter vraiment le principe et j'essaye de me remettre au maximum sur un terrain connu: le java.

  5. #5
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Oui, mais vouloir calquer le modèle objet de JavaScript sur celui de Java n'est pas une bonne idée.
    D'autre part, il n'y a pas, en JavaScript, de notion de visibilité, même s'il est possible de l'émuler.

    Ceci dit, dans l'exemple que je t'ai donné, la méthode resize() est disponible pour toute instance de Pages :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    var Pages = function() {
        this.resize = function(arg) {
            console.log("resize requested", arg);
        };
        this.resize('Dans constructeur');
    };
     
    var pages=new Pages();
    pages.resize('Hors constructeur');
    affiche bien les deux messages.
    Si ça ne fonctionne pas dans ton implémentation, c'est qu'il y a d'autres problèmes non reproduits dans ton exemple.
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  6. #6
    Expert confirmé
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Par défaut
    Quant à avoir un membre privé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    var Pages = function() {
       var a = function() {
         alert("a");
       };
       this.resize = function(arg) {
         a();
       };
       this.resize('Dans constructeur');
    };
    a est une méthode privée utilisée dans la méthode publique resize

    A+JYT

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

Discussions similaires

  1. Accès à une méthode virtuelle protégée ou privée
    Par boulouch dans le forum Langage
    Réponses: 9
    Dernier message: 22/07/2010, 09h55
  2. Accès à une méthode static depuis un thread
    Par fantomchris dans le forum MFC
    Réponses: 7
    Dernier message: 08/07/2009, 18h05
  3. Réponses: 6
    Dernier message: 07/01/2009, 10h57
  4. acces base postgres depuis eclipse
    Par mealtone dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 03/06/2005, 10h16
  5. Accès serveur WEB depuis l'internet
    Par Ultra-FX dans le forum Réseau
    Réponses: 2
    Dernier message: 26/05/2005, 17h00

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