Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > JavaScript
JavaScript Forum programmation JavaScript. Lire : Cours JavaScript, FAQ JavaScript, Toutes les FAQ JavaScript et Sources JavaScript
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 05/01/2011, 00h41   #1
Nouveau Membre du Club
 
Inscription : mars 2010
Messages : 82
Détails du profil
Informations forums :
Inscription : mars 2010
Messages : 82
Points : 27
Points : 27
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 :
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.
chok371 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2011, 21h41   #2
Rédacteur/Modérateur
 
Avatar de SpaceFrog
 
Homme
Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Inscription : mars 2002
Messages : 30 001
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Royaume-Uni

Informations professionnelles :
Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Secteur : Industrie

Informations forums :
Inscription : mars 2002
Messages : 30 001
Points : 45 077
Points : 45 077
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
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


réalisations :www.planet-languages.com|www.saftair.com| www.ouestisol.fr | www.sebemex.fr | www.extramiante.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr
SpaceFrog est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2011, 21h57   #3
Membre Expert
 
Avatar de Willpower
 
Homme Boris Dessy
sans emploi
Inscription : décembre 2010
Messages : 842
Détails du profil
Informations personnelles :
Nom : Homme Boris Dessy
Localisation : Belgique

Informations professionnelles :
Activité : sans emploi

Informations forums :
Inscription : décembre 2010
Messages : 842
Points : 1 337
Points : 1 337
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 :
Willpower est actuellement connecté   Envoyer un message privé Réponse avec citation 01
Vieux 05/01/2011, 22h11   #4
Rédacteur/Modérateur
 
Avatar de SpaceFrog
 
Homme
Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Inscription : mars 2002
Messages : 30 001
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Royaume-Uni

Informations professionnelles :
Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Secteur : Industrie

Informations forums :
Inscription : mars 2002
Messages : 30 001
Points : 45 077
Points : 45 077
Code :
Les 3 typeof donneront des "object"
biensur ... la preuve ...

Code :
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
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


réalisations :www.planet-languages.com|www.saftair.com| www.ouestisol.fr | www.sebemex.fr | www.extramiante.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr
SpaceFrog est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2011, 22h20   #5
Membre Expert
 
Avatar de Willpower
 
Homme Boris Dessy
sans emploi
Inscription : décembre 2010
Messages : 842
Détails du profil
Informations personnelles :
Nom : Homme Boris Dessy
Localisation : Belgique

Informations professionnelles :
Activité : sans emploi

Informations forums :
Inscription : décembre 2010
Messages : 842
Points : 1 337
Points : 1 337
Citation:
Envoyé par SpaceFrog Voir le message
Code :
Les 3 typeof donneront des "object"
biensur ... la preuve ...

Code :
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 :
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".
Willpower est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2011, 22h38   #6
Membre du Club
 
Jean Frederic Nault
Inscription : juillet 2010
Messages : 61
Détails du profil
Informations personnelles :
Nom : Jean Frederic Nault

Informations forums :
Inscription : juillet 2010
Messages : 61
Points : 59
Points : 59
Code :
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 :
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 :
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
nault est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2011, 22h46   #7
Membre Expert
 
Avatar de Willpower
 
Homme Boris Dessy
sans emploi
Inscription : décembre 2010
Messages : 842
Détails du profil
Informations personnelles :
Nom : Homme Boris Dessy
Localisation : Belgique

Informations professionnelles :
Activité : sans emploi

Informations forums :
Inscription : décembre 2010
Messages : 842
Points : 1 337
Points : 1 337
Citation:
Envoyé par nault Voir le message
Code :
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 :
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.
Willpower est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2011, 23h17   #8
Expert Confirmé Sénior
 
Avatar de RomainVALERI
 
Homme Romain VALERI
POOête
Inscription : avril 2008
Messages : 2 572
Détails du profil
Informations personnelles :
Nom : Homme Romain VALERI
Âge : 35
Localisation : France, Meurthe et Moselle (Lorraine)

Informations professionnelles :
Activité : POOête

Informations forums :
Inscription : avril 2008
Messages : 2 572
Points : 4 073
Points : 4 073
Citation:
Envoyé par chok371 Voir le message
ces 3 4 techniques de création d'objet :

Code javascript :
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

__________________
RomainVALERI est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2011, 23h26   #9
Membre Expert
 
Avatar de Willpower
 
Homme Boris Dessy
sans emploi
Inscription : décembre 2010
Messages : 842
Détails du profil
Informations personnelles :
Nom : Homme Boris Dessy
Localisation : Belgique

Informations professionnelles :
Activité : sans emploi

Informations forums :
Inscription : décembre 2010
Messages : 842
Points : 1 337
Points : 1 337
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 :
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 :
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);
Willpower est actuellement connecté   Envoyer un message privé Réponse avec citation 01
Vieux 07/01/2011, 00h50   #10
Nouveau Membre du Club
 
Inscription : mars 2010
Messages : 82
Détails du profil
Informations forums :
Inscription : mars 2010
Messages : 82
Points : 27
Points : 27
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 ?
chok371 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/01/2011, 01h58   #11
Membre du Club
 
Jean Frederic Nault
Inscription : juillet 2010
Messages : 61
Détails du profil
Informations personnelles :
Nom : Jean Frederic Nault

Informations forums :
Inscription : juillet 2010
Messages : 61
Points : 59
Points : 59
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
nault est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/01/2011, 06h16   #12
Membre Expert
 
Avatar de Willpower
 
Homme Boris Dessy
sans emploi
Inscription : décembre 2010
Messages : 842
Détails du profil
Informations personnelles :
Nom : Homme Boris Dessy
Localisation : Belgique

Informations professionnelles :
Activité : sans emploi

Informations forums :
Inscription : décembre 2010
Messages : 842
Points : 1 337
Points : 1 337
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 :


Citation:
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é.
Willpower est actuellement connecté   Envoyer un message privé Réponse avec citation 10
Vieux 07/01/2011, 13h22   #13
Nouveau Membre du Club
 
Inscription : mars 2010
Messages : 82
Détails du profil
Informations forums :
Inscription : mars 2010
Messages : 82
Points : 27
Points : 27
Ok merci.
chok371 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 14h11.


 
 
 
 
Partenaires

Hébergement Web