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 :

Objets dynamiques et assignation de méthodes


Sujet :

JavaScript

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 47
    Points : 22
    Points
    22
    Par défaut Objets dynamiques et assignation de méthodes
    Hello.

    Je cherche à faire quelque chose dans le genre, bien évidemment le code ci-dessous ne fonctionne pas mais j'ai l'impression de ne pas être loin:
    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
    var toto = {
    	name : 'toto'
    }
     
    Person = function() {
    	this.name = 'tutu';
    }
     
    Person.prototype.sayHi = function() {
    	alert('Hi! my name is ' + this.name);
    }
     
    var tutu = new Person();
    tutu.sayHi();
     
    toto.prototype = new Person;
     
    toto.sayHi();
    Voilà, en fait dans mon projet je reçois un simple objet (depuis le server via AJAX+JSON) et je voudrais lui ajouter des méthodes du coté du client. Comme je le reçois je n'ai aucun moyen de controler sa création.

    Si vous savez comment faire pour résoudre ce problème merci beaucoup !

  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 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    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 640
    Points : 66 663
    Points
    66 663
    Billets dans le blog
    1
    Par défaut
    pas très loin en effet ...
    Juste un souci au niveau de la création de l'objet de départ ...

    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
     
    <script type="text/javascript">
    var toto = {
    	'name' : 'toto'
    }
     
    var Person =function() {
    	this.name = 'tutu';
    }
     
    Person.prototype.sayHi = function() {
    	alert('Hi! my name is ' + this.name);
    }
     
    var tutu = new Person();
    tutu.sayHi();
    </script>

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 47
    Points : 22
    Points
    22
    Par défaut
    Euh... Je ne comprends pas trop là, ce que je veux justement c'est ajouter les méthodes de la classe Person à l'objet toto.

  4. #4
    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 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    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 640
    Points : 66 663
    Points
    66 663
    Billets dans le blog
    1
    Par défaut
    Pareil...
    c'était juste le problème de 'name' à mettre en string ...
    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
    <script type="text/javascript">
    var toto = {
    	'name' : 'toto'
    }
     
     
    var Person =function() {
    	this.name = 'tutu';
    }
     
     
     
    Person.prototype.sayHi = function() {
    	alert('Hi! my name is ' + this.name);
    }
     
    var toto = new Person();
    toto.sayHi();
     
     
    </script>

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 47
    Points : 22
    Points
    22
    Par défaut
    Oula, j'ai du mal à m'exprimer ce matin... j'aurai mieux fait de rester au lit.

    Donc si on prends mon code d'origine, je voudrai qu'il affiche cela :
    mais surtout je souhaite qu'il affiche ca : Pour ce faire je n'ai comme latitude que l'avant dernière ligne du code, celle qui dit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    toto.prototype = new Person;
    j'ai testé plein de trucs du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    toto.prototype = Person;
    toto.prototype = Person.prototype;
    Bref... Je n'arrive pas à le faire marcher

  6. #6
    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 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    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 640
    Points : 66 663
    Points
    66 663
    Billets dans le blog
    1
    Par défaut
    Bon on retourne au lit ensemble alors ????

    Heu il m'alerte bien my name is tutu ou toto ???

    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
    <title>Nouvelle page 1</title>
    <script type="text/javascript">
    var toto = {
    	'name' : 'toto'
    }
     
     
    var Person =function() {
    	this.name = 'tutu';
    }
     
     Person.prototype.sayHi = function() {
    	alert('Hi! my name is ' + this.name);
    }
     
    var tutu = new Person();
    tutu.sayHi();  // là il me dit HI! my name is tutu 
     </script>
    c'est pas ce que tu veux ???

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 47
    Points : 22
    Points
    22
    Par défaut
    On va y arriver, j'ai la foi...

    Donc je souhaite qu'il m'affiche les deux.

  8. #8
    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 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    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 640
    Points : 66 663
    Points
    66 663
    Billets dans le blog
    1
    Par défaut



    Heu non on n'est pas d'y arriver là ????

    à la base si tu fais

    puis
    et enfinil ne t'afficheras que toto ...
    je ne comprends pas comment tu peux espérer qu'il t'affiche les deux ????

  9. #9
    Membre émérite
    Inscrit en
    Septembre 2002
    Messages
    2 307
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 2 307
    Points : 2 814
    Points
    2 814
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    function Person(varName) {
    	this.name = varName;
    	this.sayHi=ditBonjour
    }
     
    function ditBonjour(){
    	alert('Hi! my name is ' + this.name);
    }
     
    var tutu = new Person("tutu");
    tutu.sayHi();  // là il me dit HI! my name is tutu 
    var toto = new Person("toto");
    toto.sayHi();  // là il me dit HI! my name is toto

    ----------------

    Citation Envoyé par SpaceFrog Voir le message
    Bon on retourne au lit ensemble alors ????

    c'est pas ce que tu veux ???
    Citation Envoyé par Nuwanda Voir le message
    On va y arriver, j'ai la foi...
    en mp svp

  10. #10
    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 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    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 640
    Points : 66 663
    Points
    66 663
    Billets dans le blog
    1
    Par défaut
    Oui mat... le tout est de cerner ce que cherche notre ami ...
    J'avoue ne pas avoir encore compris ..

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 47
    Points : 22
    Points
    22
    Par défaut
    Bon on recommence à zero.

    Le problème s'inscrit dans un projet plus important donc je n'ai pas toute la latitude possible pour modifier le code. Je défini une méthode qui est appelée avec un objet 'toto', cet objet ne définit QUE les attributs et aucune méthode.

    Ce qui revient à avoir le code équivalent :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var toto = {
    	name : 'toto'
    }
    J'ai donc un objet 'toto' qui ne définit qu'un attribut 'name'.

    Il se trouve que j'ai une classe 'Person' définie comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Person = function(name) {
    	this.name = name;
    }
     
    Person.prototype.sayHi = function() {
    	alert('Hi! my name is ' + this.name);
    }
    Hors, moi je sais que l'objet 'toto' définit les mêmes attributs que ceux de la classe 'Person'. Donc je voudrais 'caster' 'toto' en 'Person' afin de pouvoir en utiliser les méthodes.

    Voilà, j'espère être plus clair maintenant que j'ai pris mon café. Et merci de vous intéresser à mon problème

  12. #12
    Membre expérimenté 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
    Points : 1 388
    Points
    1 388
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Person = function(name) {
    	this.name = 'tutu';
    }
     
    Person.prototype.sayHi = function() {
    	alert('Hi! my name is ' + this.name);
    }
     
    var toto = {
    	name : 'toto'
    }
     
    var p = new Person();
    p.sayHi.apply(toto)
    C'est pas vraiment un cast dans le sens ou ton objet toto ne possède pas les méthodes de Person, mais ca affiche bien 'Hi! my name is toto'

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 47
    Points : 22
    Points
    22
    Par défaut
    Oui j'y avais pensé, j'avais aussi pensé à copier les méthodes. Mais bon c'est hallucinant si pour un langage interprété, un langage de script c'est pas possible de faire ca...

  14. #14
    Membre expérimenté 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
    Points : 1 388
    Points
    1 388
    Par défaut
    Oui j'y avais pensé, j'avais aussi pensé à copier les méthodes. Mais bon c'est hallucinant si pour un langage interprété, un langage de script c'est pas possible de faire ca...
    En même temps, même dans un langage compilé, tu peux pas caster une classe en une autre si elles n'ont rien a voir...

    Si par contre tu voulais faire hériter toto de Person, c'est possible. Comme t'y avais pensé, il suffit juste de bidouiller une copie de toutes les propriétés de Person si le type leur valeur est une fonction. T'arriverais au même résultat.

    Le problème de javascript, c'est que c'est pas vraiment un langage objet, donc c'est de la bidouille dans tous les sens pour arriver au même comportement.
    Ca a ses avantages et ses inconvénients ^^

Discussions similaires

  1. Méthode pour changer la couleur d'un objet dynamiquement
    Par Kalmos2 dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 17/11/2010, 11h15
  2. [C#] Accéder à un objet dynamiquement ?
    Par webtheque dans le forum ASP.NET
    Réponses: 10
    Dernier message: 14/04/2005, 15h54
  3. [Reflection] Créer un tableau d'objets dynamiquement.
    Par salome dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 25/03/2005, 18h59
  4. [FLASH MX2004] Création d'objet dynamiquement
    Par noarno dans le forum Flash
    Réponses: 3
    Dernier message: 15/12/2004, 11h00
  5. Evenement sur objet dynamique
    Par CanardJM dans le forum AWT/Swing
    Réponses: 8
    Dernier message: 19/11/2004, 13h56

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