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 :

prototype attribute et prototype property


Sujet :

JavaScript

  1. #1
    Membre tr�s actif

    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    506
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2009
    Messages : 506
    Par d�faut prototype attribute et prototype property
    L'attribut prototype n'est pas la propri�t� prototype m�me si les deux ne sont pas toujours distinctement pr�sent�s dans les livres/tutoriels javascript.
    Ou en tout cas que je n'�tais pas assez malin pour capter la nuance au premier coup d'oeil.
    Du coup forc�ment je me demandais pourquoi ce coup tordu avec les constructeurs si on veut simplement que le prototype de x soit y, pourquoi ne pas simplement faire x.prototype = y ??
    Bon, le franc est tomb�, la lumi�re f�t, et les bouquins javascript avanc�s deviennent de douces m�lodies.

    Ce post parce que pour asseoir la compr�hension j'ai fait un petit code qui illustre bien (je trouve) le propos et que je pense (na�vement?) qu'il peut en aider d'autres:

    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    <!DOCTYPE html>
     
    <head>
     
    <SCRIPT>
    "use strict";
     
    function startup(){
     
      var theConstructor = function() {};
      var parent = {toString: function() {return "parent";}};
      theConstructor.prototype = parent;
      var falseChild = {};
      falseChild.prototype = parent;
      var trueChild = new theConstructor();
     
      document.getElementById("display").innerHTML =
     
        "Object.getPrototypeOf(falseChild).toString() : " + Object.getPrototypeOf(falseChild).toString() + "<p>" + 
     
        "falseChild.prototype.toString() : " + falseChild.prototype.toString() + "<p>" + 
     
        "falseChild.toString() : " + falseChild.toString() + "<p>" + 
     
        "Object.getPrototypeOf(trueChild).toString() : " + Object.getPrototypeOf(trueChild).toString() + "<p>" + 
     
        "trueChild.prototype.toString() : " + (trueChild.prototype && trueChild.prototype.toString()) + "<p>" + 
     
        "trueChild.toString() : " + trueChild.toString() + "<p>" + 
     
        "Object.getPrototypeOf(theConstructor).toString() : " + Object.getPrototypeOf(theConstructor).toString() + "<p>" + 
     
        "theConstructor.prototype.toString() : " + theConstructor.prototype.toString() + "<p>" + 
     
        "theConstructor.toString() : " + theConstructor.toString() + "<p>" + 
     
        "";
      }
     
    </script>
     
    </head>
     
    <body onload="startup()">
     
    <div id="display">
    </div>
     
    </body>
     
    </html>

  2. #2
    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 : 55
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activit� : D�veloppeur Web
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par d�faut
    L'attribut prototype n'est pas la propri�t� prototype


    C'est quoi pour toi l'attribut prototype ?
    Autant, la propri�t�, je comprends, tout, en JavaScript est objet et chaque objet h�rite d'un (ou plusieurs) prototype, mais "l'attribut prototype", l�, vraiment, je vois pas de quoi tu parles...
    Pas de question technique par MP !
    Tout le monde peut participer � developpez.com, vous avez une id�e, contactez-moi !
    Mes formations video2brain : La formation compl�te sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'int�gration de JSFiddle et CodePen sur le forum

  3. #3
    Membre Expert Avatar de Willpower
    Homme Profil pro
    sans emploi
    Inscrit en
    D�cembre 2010
    Messages
    1 009
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activit� : sans emploi

    Informations forums :
    Inscription : D�cembre 2010
    Messages : 1 009
    Par d�faut
    pareil que Bovino, je ne comprend pas tout dans ton post, pas m�me s'il y a une question ou s'il s'agit d'un partage de code ?

    aussi tu sembles pas mal t�emm�ler les pinceaux.


    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    var falseChild = {};
    falseChild.prototype = parent;
    un objet n'est pas cens� avoir de prototype, c'est le constructeur qui poss�de un prototype pour que les objets instanci�s par celui-ci h�ritent de ses propri�t�s. (certains navigateurs regroupent ces propri�t� ainsi h�rit�es dans l'attribut "__proto__" de l'objet)

  4. #4
    Membre exp�riment�
    Profil pro
    Inscrit en
    D�cembre 2007
    Messages
    128
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2007
    Messages : 128
    Par d�faut
    Oui, le prototype (la propri�t� interne [[prototype]]) ne peut �tre attribu� "manuellement".

    Tu dois mettre ton prototype en valeur de la propri�t� "prototype", et � l'instanciation, le runtime v�rifiera si tu as mis un objet dans la propri�t� "prototype" et si oui, le mettra en valeur de la propri�t� inter interne [[prototype]].

    L'algorithme d'instanciation est grosso modo un appel � la m�thode interne [[construct]] d�crite ainsi dans la norme :

    13.2.2 [[Construct]]
    When the [[Construct]] property for a Function object F is called, the following steps are taken:
    1. Create a new native ECMAScript object.
    2. Set the [[Class]] property of Result(1) to "Object".
    3. Get the value of the prototype property of the F.
    4. If Result(3) is an object, set the [[Prototype]] property of Result(1) to Result(3).
    5. If Result(3) is not an object, set the [[Prototype]] property of Result(1) to the original Object
    prototype object as described in 15.2.3.1.

    6. Invoke the [[Call]] property of F, providing Result(1) as the this value and providing the argument
    list passed into [[Construct]] as the argument values.
    7. If Type(Result(6)) is Object then return Result(6).
    8. Return Result(1).
    A noter que sous des version de firefox (pas les derni�res) et sous Rhino, tu peux acc�der directement � la propri�t� interne [[prototype]] via la propri�t� non-standard __proto__.

  5. #5
    Membre Expert Avatar de Willpower
    Homme Profil pro
    sans emploi
    Inscrit en
    D�cembre 2010
    Messages
    1 009
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activit� : sans emploi

    Informations forums :
    Inscription : D�cembre 2010
    Messages : 1 009
    Par d�faut
    Citation Envoy� par TheGwy Voir le message
    7. If Type(Result(6)) is Object then return Result(6).
    8. Return Result(1).
    J'en apprend � chacun de tes posts.


    J'avais d�j� eu affaire � des codes o� le constructeur renvoyait un autre objet que le "this" (g�n�r� par le "new") et �a fonctionnait tr�s bien.

    Par contre j'ignorais qu'il �tait impossible de renvoyer une primitive. (string, number, etc..)




    je me suis fais un petit code de test :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    // --- SAMPLE 1 ---
    function A(){
    	return {v:1}; // return a new object
    }
    var a = new A();
    alert(a instanceof A); // FALSE
     
    // --- SAMPLE 2 ---
    function B(){
    	return 1; // returning a primitive value is forbidden -> THIS object is returned
    }
    var b = new B();
    alert(b instanceof B); // TRUE

  6. #6
    Membre tr�s actif

    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    506
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2009
    Messages : 506
    Par d�faut
    Citation Envoy� par Bovino Voir le message

    C'est quoi pour toi l'attribut prototype ?
    Autant, la propri�t�, je comprends, tout, en JavaScript est objet et chaque objet h�rite d'un (ou plusieurs) prototype, mais "l'attribut prototype", l�, vraiment, je vois pas de quoi tu parles...
    Justement l'attribut prototype d'un objet c'est "son" prototype au sens de l'h�ritage prototype de l'objet tandis que la propri�t� prototype d'un objet c'est une propri�t� comme une autre qui n'a pas de lien avec l'h�ritage.

    J'utilise le terme attribut au sens du javascript definitive guide:
    tout objet a 3 attributs: -extensible -prototype et -class.

  7. #7
    Membre tr�s actif

    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    506
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2009
    Messages : 506
    Par d�faut
    Citation Envoy� par Willpower Voir le message
    pareil que Bovino, je ne comprend pas tout dans ton post, pas m�me s'il y a une question ou s'il s'agit d'un partage de code ?
    Aucune question, c'est juste un partage, pour ceux qui veulent, si c'est inint�ressant pour toi parce que tu es plus avanc�, pas de soucis.
    Citation Envoy� par Willpower Voir le message
    aussi tu sembles pas mal t�emm�ler les pinceaux.
    Plus maintenant heureusement.
    Citation Envoy� par Willpower Voir le message
    un objet n'est pas cens� avoir de prototype
    Rien ne l'emp�che.
    Citation Envoy� par Willpower Voir le message
    c'est le constructeur qui poss�de un prototype
    Le constructeur est un objet aussi.

Discussions similaires

  1. [Prototype] Formulaire ajax
    Par Hesiode dans le forum Biblioth�ques & Frameworks
    R�ponses: 2
    Dernier message: 23/01/2008, 14h08
  2. [Prototype] Ajax et chargement
    Par watchabongo dans le forum Biblioth�ques & Frameworks
    R�ponses: 5
    Dernier message: 12/12/2007, 15h51
  3. [Prototype] Probl�me avec prototype
    Par OhAime971 dans le forum Biblioth�ques & Frameworks
    R�ponses: 2
    Dernier message: 17/10/2007, 13h52
  4. [Prototype] L'encodage
    Par JamoS dans le forum Biblioth�ques & Frameworks
    R�ponses: 2
    Dernier message: 28/09/2007, 16h36
  5. [Prototype] Function Ajax Prototype OnComplete
    Par PIEPLU dans le forum Biblioth�ques & Frameworks
    R�ponses: 2
    Dernier message: 21/08/2007, 18h09

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