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 :

Comment modifier un prototype


Sujet :

JavaScript

  1. #1
    Membre averti
    Homme Profil pro
    Développeur Java
    Inscrit en
    Février 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2014
    Messages : 10
    Par défaut Comment modifier un prototype
    Bonjour tout le monde.

    Je me permets de vous poser une petite question.

    Pourquoi ne peut on pas modifier le prototype d'un objet créé avec la fonction:
    "Object.create"?

    Merci d'avance.

  2. #2
    Membre extrêmement actif Avatar de psychadelic
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 2 532
    Par défaut
    modifier non, mais surcharger oui, comme pour tout les langages objets (dont Javascript fait partie).
    mais surcharger un objet natif du JS, c'est pas une bonne idée, mieux vaut faire ta cuisine dans une classe différente héritant des objets qui t'intéressent.

  3. #3
    Membre averti
    Homme Profil pro
    Développeur Java
    Inscrit en
    Février 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2014
    Messages : 10
    Par défaut Petite précision
    Je suis d'accord au sujet de la surcharge. Mais je pense que je serai plus clair avec un exemple de code.
    Pourquoi dans le code ci-dessous j'obtiens le message d'erreur "TypeError: voiture.prototype is undefined" en voulant rajoutant une propriété à mon objet?

    Code HTML : 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
    <!doctype html>
     
    <html>
     
    	<head>
    		<title>
    			Question constructeur
    		</title>
    	</head>
     
    	<body>
     
    		<script>
                                            
                            var voiture =
                            {
                                    roue:4,
                                    km:0,
                            };
                            
                            var clio = Object.create(voiture);
                            clio.prototype.turbo = "bereta";
                            
                            document.write("<br>Desormais ma clio a un turbo de marque :"+clio.turbo);
                            
                    </script>
    	</body>
    </html>

    Merci

  4. #4
    Membre très actif
    Homme Profil pro
    bricoleur par les mots
    Inscrit en
    Avril 2015
    Messages
    744
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 80
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : bricoleur par les mots
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2015
    Messages : 744
    Par défaut
    jour

    essai avec cette syntaxe

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Object.getPrototypeOf(clio).turbo = "bereta";

  5. #5
    Membre averti
    Homme Profil pro
    Développeur Java
    Inscrit en
    Février 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2014
    Messages : 10
    Par défaut ça fonctionne, mais pourquoi?
    Bonjour melka one.

    Je constate que ça fonctionne.
    Au delà de cette excellente nouvelle peux tu m'éclairer un peu plus.
    La méthode Object.create() crée un objet qui ne descendend pas de Object (voir ici : http://https://developer.mozilla.org...ject/prototype

    Et s'il ne descend pas de Object alors il n'a pas de prototype.

    Donc s'il n'a pas de prototype, comment getPrototypeOf() peut récupérer un prototype qui n'existe pas?

    Je ne vois pas ou je me trompe? Peux tu m'aider à la compréhension?
    Merci beaucoup.

  6. #6
    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 : 74
    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


    Voir : https://developer.mozilla.org/en-US/...getPrototypeOf

    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
    let Voiture ={
        roue: 4,
        km: 0,
    };
     
    let clio = Object.create(Voiture); // écriture possible mais normalement on doit utiliser new
     
    clio.turbo = "bereta";
     
    console.log(`Ma clio a un turbo de marque : ${ clio.turbo }`);
     
    console.log(clio.prototype); // undefined
     
    let protoClio = Object.getPrototypeOf(clio);
     
    protoClio.distance = ( vitesse=120, temps=1 ) => {
        return vitesse * temps;
    }
     
    console.log(`clio distance : ${ clio.distance() } km`);

    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.)

  7. #7
    Membre très actif
    Homme Profil pro
    bricoleur par les mots
    Inscrit en
    Avril 2015
    Messages
    744
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 80
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : bricoleur par les mots
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2015
    Messages : 744
    Par défaut
    l'utilisation du mot prototype marche pour la fonction constructeur d'un objet c'est le cas quand on utilise new, dans ton car on ne peut pas le faire car Object.create n'utilise pas de fonction constructeur pour cree une instance tu n'a qu'une référence a l'objet et dans ce cas on utilise getPrototypeOf ou __proto__

  8. #8
    Membre averti
    Homme Profil pro
    Développeur Java
    Inscrit en
    Février 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2014
    Messages : 10
    Par défaut Parfaitement compris.
    Merci à tous j'ai tout compris.
    Melka one, ta réponse était parfaite et m'a parfaitement éclairé.

  9. #9
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 988
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 988
    Par défaut
    Un article intéressant sur le sujet: https://javascriptweblog.wordpress.c...pt-prototypes/

  10. #10
    Membre Expert Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Par défaut
    On peut aussi faire comme ça.
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
                            var clio = Object.create(voiture);
                            //clio.prototype.turbo = "bereta";
                            clio.constructor.prototype.turbo = "bereta";

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

Discussions similaires

  1. [XSL] Comment modifier la valeur d'une variable?
    Par sorcer1 dans le forum XSL/XSLT/XPATH
    Réponses: 8
    Dernier message: 17/02/2010, 13h26
  2. Comment modifier un Metafile existant ?
    Par monmien dans le forum Langage
    Réponses: 4
    Dernier message: 09/09/2004, 11h59
  3. [jar] Comment modifier un fichier jar
    Par newfsch dans le forum JBuilder
    Réponses: 5
    Dernier message: 18/07/2004, 14h25
  4. comment modifier une texture?
    Par tibyann dans le forum DirectX
    Réponses: 6
    Dernier message: 16/06/2004, 15h27
  5. [ClassPath] Comment modifier le classpath d'eclipse?
    Par Elmilouse dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 08/04/2004, 18h32

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