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] Accès à une instance objet depuis un enfant


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 37
    Par défaut [POO] Accès à une instance objet depuis un enfant
    Bonjour à tous !
    Voila j'ai un petit problème avec le javascript Objet.
    En gros, je créé une boite avec un titre. dans le titre j'ai des boutons. Depuis leurs méthodes onmousedown, j'aimerai accéder à la box pour lancer sé fonction Edit().

    Comment est-ce possible ?


    Voici le code en question :

    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
     
    function Bar(title){
    	this.Content=document.createElement("div");
    	this.Content.setAttribute("class","bar");
    	this.Content.appendChild(document.createTextNode(title));
    	this.fermer=document.createElement("img");
    	this.fermer.setAttribute("src","images/icons/close.gif");
    	this.fermer.setAttribute("class","button");
    	this.edit=document.createElement("img");
    	this.edit.setAttribute("src","images/icons/edit.gif");
    	this.edit.setAttribute("class","button");
    	this.edit.onmousedown=function(){
    		?????????
    	}
    	this.Content.appendChild(this.edit);
    	this.Content.appendChild(this.fermer);
    }
     
     
    function BoxMembersManager(title){
    	this.Box=Box();
    	this.Bar=new Bar(title);
    	this.Infos=new Infos();
    	ObjectDraggable(this.Bar);
    	this.Box.appendChild(this.Bar.Content);
     
     
    	this.Construct=function(){
    		var containertext=document.createElement("div");
    		..................
    		this.Infos.appendChild(containertext);
    		this.Box.appendChild(this.Infos);
    	}
     
    	this.Edit=function(){
     
    	}
    }
    Merci beaucoup d'avance pour votre réponse !

  2. #2
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 658
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 658
    Billets dans le blog
    1
    Par défaut
    déja setAttribute ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.Content.className="bar";
    etc ...


    sinon as tu essayé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    this.edit.onmousedown=function(){
    		this.Edit()
    	}
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 37
    Par défaut
    Alors, je viens d'essayer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    this.edit.onmousedown=function(){
    		this.Edit()
    	}
    Mais visiblement il en veut pas, il cherche la fonction Edit() liée à this.edit (qui n'existe pas bien sur).


    Ah et pour :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.Content.className="bar";
    ça fonctionne même s'il n'est pas encore dans le flux ? J'ai jamais essayé.

  4. #4
    Membre Expert Avatar de DoubleU
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 106
    Par défaut
    Essaie ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    this.edit.onmousedown = function(obj){
       return function(){
          obj.Edit();
       }
    }(this)

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 37
    Par défaut Accès à une instance objet depuis un enfant Répondre à la discussion [RESOLU]
    Yes !
    Ca marche du tonnerre !
    Par contre, je ne comprend pas bien ce que c'est que ce "(this)" tout seul.
    Est-ce que t'aurais une petite explic ?
    En tout cas, ça c'est RESOLU !

    Merci beaucoup à vous 2

  6. #6
    Membre Expert Avatar de DoubleU
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 106
    Par défaut
    C'est un des plaisir du javascript ca

    Si t'enleves la fonction du milieu et que tu gardes que ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.edit.onmousedown = function(obj){}(this)
    ce qui ce passe c'est que tu crées une fonction anonyme qui prend un paramètre obj, tu en définis le contenu (entre les accolades) et ensuite le (this) sert à appeler cette fonction anonyme, le paramètre this représentant le contexte d'exécution ou scope (ta classe donc).

    Maintenant on rajoute la fonction interne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    this.edit.onmousedown = function(obj){
       return function(){
          obj.Edit();
       }
    }(this)
    C'est ce qu'on appelle en javascript une closure, une fonction qui en encapsule une autre (c'est par ailleurs par ce mécanisme que tu peux créer des classes en javascript). Et un des points particuliers des closures c'est qu'elles permettent aux fonctions interne (en rouge) d'accéder au contexte des fonctions encapsulantes (en bleu). Et dans ce cas, la fonction interne accède au paramètre obj de la fonction externe qui représente le contexte d'exécution donc ta classe (en vert).

    Ouf, on y est

    J'espère que j'ai pas été trop embrouillé (et que j'ai pas dit de conneries ), c'est pas évident à comprendre et à expliquer ca.

  7. #7
    Inactif  

    Profil pro
    Inscrit en
    Mai 2010
    Messages
    345
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 345
    Par défaut
    Citation Envoyé par SpaceFrog Voir le message
    déja setAttribute ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.Content.className="bar";
    etc ...


    sinon as tu essayé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    this.edit.onmousedown=function(){
    		this.Edit()
    	}
    Ne dénigre pas jeune padawan le setAttribute a ses raisons d'exister, là c'est clair, c'est inutile.
    Tiens si tu ne connais pas et j'y apprends pleins de chose :
    http://www.javascript.info
    et l'article en réponse aux attributs
    http://javascript.info/tutorial/attr...tom-properties

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

Discussions similaires

  1. [POO] Créer une instance d'un objet par la valeur d'une variable
    Par philworks dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 29/11/2007, 14h27
  2. [POO] accès à une méthode
    Par julien.63 dans le forum Général JavaScript
    Réponses: 13
    Dernier message: 24/10/2007, 15h48
  3. Réponses: 1
    Dernier message: 10/01/2007, 12h04
  4. Réponses: 4
    Dernier message: 15/03/2006, 12h33
  5. [POO] Transtyper une instance
    Par Séb. dans le forum Langage
    Réponses: 22
    Dernier message: 13/02/2006, 13h23

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