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

Bibliothèques & Frameworks Discussion :

prototype / prototype ? [Prototype]


Sujet :

Bibliothèques & Frameworks

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    530
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 530
    Points : 316
    Points
    316
    Par défaut prototype / prototype ?
    Bonjour à tous,

    Si l'intitulé de mon message est plutot étrange c'est que je ne sais moi-même pas très bien comment poser cette question.

    Est-ce volontairement que le terme "prototype" est utilisé pour désigner le Framework ou la possibilité d'etendre les fonctions d'un objet javascript ?

    Pourquoi faut-il passer par prototype pour utiliser la fonction "in_Array" par exemple ?

    y a-t-il un lien sur le forum pour comprendre un peu mieux l'utilisation de prototype (pas le Framework) ?

    Si vous m'aidez déja un peu à dégrossir ces premières questions, j'en aurai sans doutes d'autres

    Bon début de journée à tous

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    530
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 530
    Points : 316
    Points
    316
    Par défaut
    Bon après recherche dans le Forum j'ai trouvé ceci :

    http://www.developpez.net/forums/d52...ation-syntaxe/

    le replace général de PHP:
    destructif
    Code :

    replaceAll= function(str,old,rep){
    while(str.indexOf(old)>-1){str=str.replace(old,rep)}
    return str;
    }


    non destructif
    Code :

    String.prototype.replaceAll= function(old,rep){
    var str = this;
    while(str.indexOf(old)>-1){str=str.replace(old,rep)}
    return str;
    }


    1°) Pourquoi destructif ou non destructif ?

    2°) le mot prototype est-il juste une convention et pourait-il être remplacé par n'importe quel autre mot ?

  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
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    • destructif / non destructif :

    L'objet d'origine est remplacé et donc n'existe plus dans un code destructif, alors que dans un code non destructif, un nouvel objet est créé et l'ancien est toujours accessible.
    • prototype :

    prototype est une instruction du langage javascript qui permet d'ajouter des propriétés et méthodes à des objets, tu ne peux donc pas remplacer son nom. L'utilité par rapport à une fonction 'classique' est que tous les objets de la même classe héritent de ces propriétés et méthodes, dans ton exemple, toutes les chaînes acceptent la méthode replaceAll automatiquement.

  4. #4
    Expert confirmé
    Avatar de le_chomeur
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    3 653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 3 653
    Points : 4 835
    Points
    4 835
    Par défaut
    de plus dans les préconisations il est conseillé de créer son objet et de lui affecter ses méthodes / propriété via prototype plutôt que de les implémentés directement au seins de la déclaration de l'objet , exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    var toto=function(moi){
    this.monNom = (moi)?moi:"inconnu";
    this.QuiSuisJe = function(){alert(this.monNom)};
    }
    il vaut mieux faire :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var toto=function(moi){
    this.monNom = (moi)?moi:"inconnu";
    }
     
    toto.prototype.QuiSuisJe = function(){alert(this.monNom)};

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

    Informations forums :
    Inscription : Avril 2006
    Messages : 530
    Points : 316
    Points
    316
    Par défaut
    Merci Bovino j'y vois déja un peu plus clair pour prototype.

    Mais pour destructif ou non destructif, l'objet dans mon exemple étant String, qu'est ce qui serait détruit ?

    la méthode replaceAll n'existant pas dans javascript elle ne pourrait pas remplacer l'ancienne.

    Quant à détruire l'objet String et ses propriétés...

  6. #6
    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
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    La destruction se fait sur la chaîne pour laquelle tu appelles la méthode replaceAll, par exemple, avec cette méthode, tu peux ensuite faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var ma_chaine = "Une chaine quelconque";
    ma_chaine.replaceAll('e','é');
    qui remplacera tous tes e par des é, mais la chaine initiale n'existe plus dans le cas d'un code destructif.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    530
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 530
    Points : 316
    Points
    316
    Par défaut
    destructif : est-ce à dire qu'une fonction javascript peut modifier la valeur d'une variable hors de la fonction ?

    Je demande ça car je crois bien qu'en PHP il faut passer cette variable en reference pour qu'elle soit modifiée hors de la fonction.

  8. #8
    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
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Une fonction javascript n'a accès qu'aux variables de son contexte et ne peux donc modifier que celles-ci :
    • Variables de la fonction.
    • Variables des éventuelles fonctions qui appelantes (si ta fonction est appelée dans une autre fonction).
    • Variables globales.

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    530
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 530
    Points : 316
    Points
    316
    Par défaut
    donc à moins d'écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    maChaine=ma_chaine.replaceAll('e','é');
    la chaine d'origine ne sera pas modifiée ?
    que l'on utilise prototype ou pas ?

    et si l'on ne souhaite pas modifier la chaine :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    maChaineBis=ma_chaine.replaceAll('e','é');
    que l'on utilise prototype ou pas ?

  10. #10
    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
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Attention, ce n'est pas l'instruction prototype qui rend un code destructif ou non, c'est la façon dont le code fonctionne !

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    530
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 530
    Points : 316
    Points
    316
    Par défaut
    Je comprends plus tout à fait

    Dans ce cas quelle différence y aurait-il à écrire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    String.prototype.replaceAll= function(old,rep){
    var str = this;
    while(str.indexOf(old)>-1){str=str.replace(old,rep)}
    return str;
    }
    Ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    var replaceAll= function(old,rep){
    var str = this;
    while(str.indexOf(old)>-1){str=str.replace(old,rep)}
    return str;
    }
    lorsque j'appelle

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    maStringBis=maString.replaceAll("é","e");

  12. #12
    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
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Que ta deuxième solution renvoie :
    maString.replaceAll is not a function

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    530
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 530
    Points : 316
    Points
    316
    Par défaut
    Peux-tu être un peu plus précis s'il te plaît et me dire pourquoi ma deuxième solution renvera cette erreur ?

    J'aimerai vraiment comprendre pour pouvoir utiliser prototype à bon escient

  14. #14
    Expert confirmé
    Avatar de le_chomeur
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    3 653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 3 653
    Points : 4 835
    Points
    4 835
    Par défaut
    pour te simplifier la compréhension de prototype :

    prototype te sert a ajouter des méthodes aux objets javascript ni plus ni moins

    re regarde l'exemple que j'ai donné plus haut ....

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    530
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 530
    Points : 316
    Points
    316
    Par défaut
    Dans ton exemple toto est-il un objet ou une fonction ?

  16. #16
    Expert confirmé
    Avatar de le_chomeur
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    3 653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 3 653
    Points : 4 835
    Points
    4 835
    Par défaut
    exemple concret :

    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
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Document sans nom</title>
    <script type="text/javascript">
    var toto= function(moi){
    	this.monNom = (moi)?moi:"inconnu";
    	this.QuiSuisJe = function(){alert("je suis : " + this.monNom)};
    }
    //De quel type est toto onjet ou function ?
    alert(typeof(toto));
    //Hé oui toto est pour l'instant une fonction plus exactement un constructeur !<br />
    ///Preuve en image :
    var test = new toto("le_chomeur");
    test.QuiSuisJe();
    //Et maintenant ?
    alert(typeof(test));
    //Test est un objet :) une instance de toto :)
     
    //La même chose avec prototype
    var tata= function(moi){
    	this.monNom = (moi)?moi:"inconnu";
    }
    tata.prototype.QuiSuisJe = function(){alert("je suis : " + this.monNom)};
    alert(typeof(tata));
    //...
     
    </script>
    </head>
     
    <body>
    </body>
    </html>
    le mot clé permettant de créer un objet en javascript est new

  17. #17
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    530
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 530
    Points : 316
    Points
    316
    Par défaut
    Je crois que je commence à comprendre.

    La syntaxe que tu utilises crée un objet dont les méthodes sont définie par cette syntaxe.

    ensuite
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    toto.prototype.QuiSuisJe = function(){alert(this.monNom)};
    ajoute la méthode QuiSuisJe() à cette objet sans le modifier.

    Est-ce exact ?

  18. #18
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    530
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 530
    Points : 316
    Points
    316
    Par défaut
    ha j'ai été un peu lent

    ne tiens pas compte de ce post je vais commencer par lire ta réponse

  19. #19
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    530
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 530
    Points : 316
    Points
    316
    Par défaut
    OK je crois que j'ai compris.

    j'ai rajouté quelques ligne à ton code

    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
    39
    40
    41
    42
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Document sans nom</title>
    <script type="text/javascript">
    var toto= function(moi){
    	this.monNom = (moi)?moi:"inconnu";
    	this.QuiSuisJe = function(){alert("je suis : " + this.monNom)};
    }
    //De quel type est toto onjet ou function ?
    alert(typeof(toto));
    //Hé oui toto est pour l'instant une fonction plus exactement un constructeur !<br />
    ///Preuve en image :
    var test = new toto("le_chomeur");
    test.QuiSuisJe();
    //Et maintenant ?
    alert(typeof(test));
    //Test est un objet :) une instance de toto :)
     
    //La même chose avec prototype
    var tata= function(moi){
    	this.monNom = (moi)?moi:"inconnu";
    }
    tata.prototype.QuiSuisJe = function(){alert("je suis : " + this.monNom)};
     
    test2=new tata("alex");
    test2.QuiSuisJe();
     
    alert(typeof(tata));
     
    alert(typeof(test2));
     
    //...
     
    </script>
    </head>
     
    <body>
    </body>
    </html>
    et j'en déduis que prototype permet de rajouter des méthodes à la classe tata sans avoir besoin d'intervenir dans la classe elle-même.

    peut-on dire que c'est presque un heritage (ou plutot une sous-classe ) ?

    Et pour revenir à mon autre question : on peut dire que tout cela n'a rien à voir avec prtotype (le Framework) qui pourrait s'appeler complètement autrement ?

  20. #20
    Expert confirmé
    Avatar de le_chomeur
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    3 653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 3 653
    Points : 4 835
    Points
    4 835
    Par défaut
    Citation Envoyé par Alexdezark Voir le message
    Et pour revenir à mon autre question : on peut dire que tout cela n'a rien à voir avec prtotype (le Framework) qui pourrait s'appeler complètement autrement ?

    O U I


+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [Prototype] Modalbox et fonction javascript
    Par rhaamo dans le forum Bibliothèques & Frameworks
    Réponses: 3
    Dernier message: 10/07/2008, 14h41
  2. [Prototype] Event.observe - MSIE
    Par Guybrush113 dans le forum Bibliothèques & Frameworks
    Réponses: 5
    Dernier message: 20/06/2008, 17h10
  3. [Prototype] Formulaire à taille dynamique
    Par huguette dans le forum Bibliothèques & Frameworks
    Réponses: 1
    Dernier message: 07/03/2008, 01h57
  4. [Prototype] Prototype 1.6 un peu lourd
    Par php_de_travers dans le forum Bibliothèques & Frameworks
    Réponses: 2
    Dernier message: 25/01/2008, 16h47
  5. [Prototype] Onloading -> Oncomplete
    Par Jonathan.b dans le forum Bibliothèques & Frameworks
    Réponses: 1
    Dernier message: 30/11/2007, 17h14

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