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 :

Différences entre les techniques de création d'objet


Sujet :

JavaScript

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 82
    Points : 60
    Points
    60
    Par défaut Différences entre les techniques de création d'objet
    Bonjour,

    J'aimerais savoir si il y a une différence entre ces 3 techniques de création d'objet :

    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
    var unObj = function() {
       this.prop1 = valeur1;
       this.prop2 = valeur2;
       this.method1 = function() { ... }
    }
    var useObj = new unObj();
     
    -----
     
    var unObj = {
       prop1 : valeur1,
       propr2 : valeur2.
       method1 : function() { ... }
    }
     
    -----
     
    var unObj = new Object();
    unObj.prop1 = valeur1;
    unObj.prop2 = valeur2;
    unObj.method1 = function() { ... };
    Merci.

  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 669
    Points
    66 669
    Billets dans le blog
    1
    Par défaut
    la différence réside dans le type d'objet

    teste avec typeOf ...

    Chacun des type pouvant avoir des propriétés ou methodes propres différentes
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  3. #3
    Membre expérimenté 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 : Belgique

    Informations professionnelles :
    Activité : sans emploi

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 009
    Points : 1 519
    Points
    1 519
    Par défaut
    Citation Envoyé par SpaceFrog Voir le message
    la différence réside dans le type d'objet

    teste avec typeOf ...

    Chacun des type pouvant avoir des propriétés ou methodes propres différentes
    Les 3 typeof donneront des "object"

    Pour moi, les 3 sont identiques, mais :

    la première est plus pratique si tu comptes définir plusieurs objets avec le même prototype. (structure)

    La deuxième solution si tu ne fais qu'un seul objet de ce prototype.

    La troisième permet de rajouter des méthodes/propriétés. (par exemple sous certaines conditions.) mais ne doit pas servir de déclaration car le "new Object" est moche et pas très esthétique(selon moi) et devrait donc être remplacé/couplé à un des 2 exemples précédent avec un constructeur pauvre ou vide si tu le désires comme par exemple :
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    eval(a='eval(a)')
    recursive make it evil
    eval make it eval

  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 669
    Points
    66 669
    Billets dans le blog
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Les 3 typeof donneront des "object"
    biensur ... la preuve ...

    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
    var valeur1
    var valeur2
    var unObj1 = function() {
       this.prop1 = valeur1;
       this.prop2 = valeur2;
       this.method1 = function() { alert('') }
    }
    var useObj = new unObj1();
     
     
    var unObj2 = {
       prop1 : valeur1,
       propr2 : valeur2,
       method1 : function() { void(0) }
    }
     
     
     
    var unObj3 = new Object();
    unObj3.prop1 = valeur1;
    unObj3.prop2 = valeur2;
    unObj3.method1 = function() {  };
     
     
    alert(typeof unObj1)
    alert(typeof unObj2)
    alert(typeof unObj3)
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  5. #5
    Membre expérimenté 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 : Belgique

    Informations professionnelles :
    Activité : sans emploi

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 009
    Points : 1 519
    Points
    1 519
    Par défaut
    Citation Envoyé par SpaceFrog Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Les 3 typeof donneront des "object"
    biensur ... la preuve ...

    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
    var valeur1
    var valeur2
    var unObj1 = function() {
       this.prop1 = valeur1;
       this.prop2 = valeur2;
       this.method1 = function() { alert('') }
    }
    var useObj = new unObj1();
     
     
    var unObj2 = {
       prop1 : valeur1,
       propr2 : valeur2,
       method1 : function() { void(0) }
    }
     
     
     
    var unObj3 = new Object();
    unObj3.prop1 = valeur1;
    unObj3.prop2 = valeur2;
    unObj3.method1 = function() {  };
     
     
    alert(typeof unObj1)
    alert(typeof unObj2)
    alert(typeof unObj3)
    Evidement, il a mal écrit son code, mais on peut déviner que ce qu'il voulait écrire c'était :


    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
    var makeObj = function() {
       this.prop1 = 1;
       this.prop2 = 2;
       //this.method1 = function() {  };
    };
    var unObj = new makeObj();
    alert(typeof(unObj));
     
    //-----
     
    var unObj = {
       prop1 : 1,
       propr2 : 2
    }
     
    alert(typeof(unObj));
    //-----
     
    var unObj = new Object();
    unObj.prop1 = 1;
    unObj.prop2 = 2;
     
    alert(typeof(unObj));
    il a juste appelé le premier "useObj" au lieu de "unObj" à qui il avait déjà donné le nom de la fonction servant à le construire ... toi-même tu as changé les noms pour les appeler "unObj1" et "unObj2".
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    eval(a='eval(a)')
    recursive make it evil
    eval make it eval

  6. #6
    Membre habitué
    Homme Profil pro
    Inscrit en
    Juillet 2010
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 96
    Points : 140
    Points
    140
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    var unObj = function(){...};
    // ou
    var unObj = new Object();
    // ou
    var unObj = {};
    revien au même ; attache un objet vide a unObj
    nb: pour le premier utiliser avec fonction(),
    cré un object seulement si il est utilisé avec new comme dans ton exemple


    pour :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    var unObj = new Object();
    unObj.prop1 = 'valeur1'; // ou unObj['prop1'] = 'valeur1';
     
    // ou
     
    var unObj = {'prop1':'valeur1'};
     
    //ou
     
    var unObj = function() {
       this.prop1 = 'valeur1';
    }
    cest 3 methodes font pratiquement la meme choses comme la bien expliquer Willpower.

    mais tu peux les mixer a ta guise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    var humain = function(){
         this.planete = 'terre';
         this.age = 1;
     
        this.livreFavori = function(titre){
            this.livreFavori = titre
        }
    }
    var nault = new humain();
         nault.profession = 'programmeur'
         nault['couleurYeux'] = 'bleu'
         nault.livreFavori('c++ pour les null')
    donc y a t'il une différence entre ces 3 facons de creer des objets

    Oui la façon dont tu les déclare seulement, et par la suite comment tu va t'en servir, bien c'est à ta guise selon l'utilisé/fonctionnment qu'ils auronts

  7. #7
    Membre expérimenté 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 : Belgique

    Informations professionnelles :
    Activité : sans emploi

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 009
    Points : 1 519
    Points
    1 519
    Par défaut
    Citation Envoyé par nault Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    var unObj = function(){...};
    // ou
    var unObj = new Object();
    // ou
    var unObj = {};
    ...
    je dirai même plus (pour être précis et supprimer l’ambiguïté entre objet et fonction qui traîne depuis le début du thread)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    var unObj = new(function(){})();
    // ou
    var unObj = new Object();
    // ou
    var unObj = {};
    revient au même, attache un objet vide à unObj.
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    eval(a='eval(a)')
    recursive make it evil
    eval make it eval

  8. #8
    Expert confirmé
    Avatar de RomainVALERI
    Homme Profil pro
    POOête
    Inscrit en
    Avril 2008
    Messages
    2 652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : POOête

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 652
    Points : 4 164
    Points
    4 164
    Par défaut
    Citation Envoyé par chok371 Voir le message
    ces 3 4 techniques de création d'objet :

    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function unObj(valeur1, valeur2) {
       this.prop1 = valeur1;
       this.prop2 = valeur2;
       this.method1 = function() { /* code */ };
    }
    var useObj = new unObj();
    ...qui revient au même que la première de tes syntaxes, en l'occurrence : un constructeur, donc un objet Function.
    D'où la nécessité de l'utilisation du "new" dont Willpower a déjà parlé.

    ...pour les linguistes et les curieux >>> générateur de phrases aléatoires

    __________________

  9. #9
    Membre expérimenté 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 : Belgique

    Informations professionnelles :
    Activité : sans emploi

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 009
    Points : 1 519
    Points
    1 519
    Par défaut
    Citation Envoyé par Willpower Voir le message
    je dirai même plus (pour être précis et supprimer l’ambiguïté entre objet et fonction qui traîne depuis le début du thread)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    var unObj = new(function(){})();
    // ou
    var unObj = {};
    // ou
    var unObj = new Object();
    revient au même, attache un objet vide à unObj.
    Pour me citer moi-même, la différence entre la première et les 2 suivantes, c'est qu'en plus de pouvoir ré-instancier des objets ayant le même constructeur, dans la première ont peut executer du code dans la création de l'objet alors que la 2ème n'est qu'une série d'assignations de propriétés et de méthodes. (la 3ème étant moche car pareil que la 2 s'écrivant avec plus de caractères et aucune assignation directe n'est possible.)

    Voila, tout est résumé ici.

    ps:RomainVALERI, je ne vois pas de quoi tu parles. t'as recopié la première façon.


    edit:

    il existe aussi les trucs farfelus pour créer/copier (plus ou moins partiellement) les objets :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    var unObj1 = new (function(){this.prop1="auto";})();
    alert(unObj1.prop1);
     
    //-----
     
    var unObj4 = new unObj1.constructor();
    alert(unObj4.prop1)
     
     
    makeObj5 = function(){};
    makeObj5.prototype = unObj1;
    var unObj5 = new makeObj5();
    alert(unObj5.prop1);
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    eval(a='eval(a)')
    recursive make it evil
    eval make it eval

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 82
    Points : 60
    Points
    60
    Par défaut
    Merci.

    Par contre, dans les codes que vous avez écrits, je comprends pas pourquoi il y a des lignes où il n'y a pas de " ; " à la fin, c'est pas obligatoire normalement ?

  11. #11
    Membre habitué
    Homme Profil pro
    Inscrit en
    Juillet 2010
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 96
    Points : 140
    Points
    140
    Par défaut
    Si tu ne met pas de ; a la fin , ton script va quand même s'exécuter mais pour des raison sémantique et de Bonne pratique, il est préférable de
    Toujour mettre le point-virgule

  12. #12
    Membre expérimenté 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 : Belgique

    Informations professionnelles :
    Activité : sans emploi

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 009
    Points : 1 519
    Points
    1 519
    Par défaut
    Citation Envoyé par nault Voir le message
    Si tu ne met pas de ; a la fin , ton script va quand même s'exécuter mais pour des raison sémantique et de Bonne pratique, il est préférable de
    Toujour mettre le point-virgule
    Ce n'est absolument pas obligatoire, en javascript le saut de ligne correspond à une fin d'instruction mais effectivement c'est vivement conseillé ! Déjà pour la lecture, mais aussi par exemple si un jour tu décides que ton code devient important et que tu décides de le minimiser via un minimiser (suppression des espace, sauts de lignes, diminution des noms des variables locales, etc..)

    dans ce cas les sauts de ligne seront supprimés mais pas remplacé par des ";" donc ton code ne fonctionnera plus.

    exemple :


    function alpha(){
    //blabla
    }

    var beta = function(){
    //blabla
    };
    si tu déclares une fonction à la manière de beta, il faut impérativement un ; à la fin pour clôturer l’assignation "=", une fois j'avais ce type de code et j'avais oublié un ";" après une fonction de ce genre et j'ai bien galéré pour trouver pourquoi il ne fonctionnait plus après l'avoir minimisé.
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    eval(a='eval(a)')
    recursive make it evil
    eval make it eval

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 82
    Points : 60
    Points
    60
    Par défaut
    Ok merci.

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

Discussions similaires

  1. Différence entre les méthodes de création des modèles EMF
    Par Aménie_Val dans le forum Eclipse Java
    Réponses: 0
    Dernier message: 22/08/2011, 07h52
  2. Différence entre les propriétés String et Value des objets Uicontrol
    Par occor dans le forum Interfaces Graphiques
    Réponses: 1
    Dernier message: 18/01/2008, 12h13
  3. Réponses: 67
    Dernier message: 16/12/2007, 13h41
  4. fopen -> différences entres les types d'ouvertur
    Par Patrick PETIT dans le forum C
    Réponses: 10
    Dernier message: 01/06/2003, 18h19
  5. Réponses: 3
    Dernier message: 07/05/2002, 16h06

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