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 à l'essai
    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
    Points : 12
    Points
    12
    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
    Expert confirmé Avatar de psychadelic
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    2 529
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 2 529
    Points : 4 749
    Points
    4 749
    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 à l'essai
    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
    Points : 12
    Points
    12
    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 expérimenté
    Homme Profil pro
    bricoleur par les mots
    Inscrit en
    Avril 2015
    Messages
    724
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Seine Maritime (Haute Normandie)

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

    Informations forums :
    Inscription : Avril 2015
    Messages : 724
    Points : 1 620
    Points
    1 620
    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 à l'essai
    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
    Points : 12
    Points
    12
    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
    Points : 22 933
    Points
    22 933
    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`);

  7. #7
    Membre expérimenté
    Homme Profil pro
    bricoleur par les mots
    Inscrit en
    Avril 2015
    Messages
    724
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Seine Maritime (Haute Normandie)

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

    Informations forums :
    Inscription : Avril 2015
    Messages : 724
    Points : 1 620
    Points
    1 620
    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 à l'essai
    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
    Points : 12
    Points
    12
    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 éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 888
    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 888
    Points : 6 632
    Points
    6 632
    Par défaut
    Un article intéressant sur le sujet: https://javascriptweblog.wordpress.c...pt-prototypes/

  10. #10
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    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