11548 sujets

JavaScript, DOM et API Web HTML5

bonjour à tous ..

je me suis plongé depuis quelque jours dans le javascript et les classes d'objets ,
et dans un tutorial ( en anglais ) de kevin Lindsey il utilise une instruction que je ne comprends pa trop ... bon d'accord pas du tout :


KevLinDev = { };


... vous pouvez en voir le code à cet endroit

Quel type d'objet ( ou fonction , instruction ..!!) est-ce que cela crée ?
J'ai beau cherché dans les doc sur JS et je ne trouve nulle part ce type d'instruction ... qui me semble essentiel pourtant dans ce code !

merci de votre aide .
Modifié par kzone (26 Jan 2007 - 12:15)
Salut,

Ce n'est pas une instruction mais une expression qui permet de créer un objet. On appelle ça un littéral objet. Pour plus d'infos, le lien donné dans la première question du quiz JS/DOM difficile devrait t'aider je pense. Smiley cligne

<edit>Par curiosité, quelle raison te pousse à te mettre aux "classes d'objets" (d'ailleurs, qu'est-ce que tu appelles comme ça ?) ?</edit>
Modifié par Julien Royer (26 Jan 2007 - 10:00)
oui c'est la forme littérale de :


var KevLinDev = new Object();


ça peux servir pour créer un objet en y déclarant en même temps des propriétés et des méthodes :


var personne = { nom:"Toto", age:25, parler:function(){...} }
Bonjour,

Attention, il est quelque peu "dangereux" d'assimiler un "new Object()" (qui permet d'instancier plusieurs objets) à un littéral objet (qui n'est qu'un seul objet : un singleton).

Romain
yodaswii a écrit :
Attention, il est quelque peu "dangereux" d'assimiler un "new Object()" (qui permet d'instancier plusieurs objets) à un littéral objet (qui n'est qu'un seul objet : un singleton).
Heu... Peux-tu expliciter ta pensée ? A ma connaissance, les syntaxes "new Object()" et "{}" sont rigoureusement identiques.
Julien Royer a écrit :
Heu... Peux-tu expliciter ta pensée ? A ma connaissance, les syntaxes "new Object()" et "{}" sont rigoureusement identiques.


Peut être suis-je influencé par d'autres langages orientés objet ...

Oui, effectivement "new Object()" et "{}" ont au final le même résultat.

Cependant, ma perception des choses est différente (peut être suis-je dans l'erreur ...) : la syntaxe "{}" est un littéral objet qui est un singleton c'est-à-dire une "instance d'objet unique" (il ne peut y'en avoir qu'une seule ; elle ne nécessite pas d'être instanciée). Contrairement, la syntaxe "new Object()" est un constructeur (function) qui permet d'instancier plusieurs objets (d'un même type) ...

Ai-je tort (possible Smiley confus ) ?

Romain
yodaswii a écrit :
Cependant, ma perception des choses est différente (peut être suis-je dans l'erreur ...) : la syntaxe "{}" est un littéral objet qui est un singleton c'est-à-dire une "instance d'objet unique" (il ne peut y'en avoir qu'une seule ; elle ne nécessite pas d'être instanciée). Contrairement, la syntaxe "new Object()" est un constructeur (function) qui permet d'instancier plusieurs objets (d'un même type) ...
Nop... Méthode simple pour s'en convaincre :
alert({}.constructor);
Julien Royer a écrit :
Nop... Méthode simple pour s'en convaincre :
alert({}.constructor);


J'ai du mal à cerner la chose ... en effet, ça retourne la function Object (le constructeur) ; je n'ai pas dis qu'un littéral objet n'était pas un objet mais un objet déjà instancié donc différent d'une instanciation par le "new nomObjet()" ... Smiley sweatdrop
yodaswii a écrit :
J'ai du mal à cerner la chose ... en effet, ça retourne la function Object (le constructeur) ; je n'ai pas dis qu'un littéral objet n'était pas un objet mais un objet déjà instancié donc différent d'une instanciation par le "new nomObjet()" ... Smiley sweatdrop
Ah, OK... Non, un littéral objet ne fonctionne pas du tout comme un littéral String en Java, et bien heureusement, puisque c'est justement un objet modifiable. Smiley smile

Un deuxième test pour t'en convaincre :
alert({} === {});
Julien Royer a écrit :
Ah, OK... Non, un littéral objet ne fonctionne pas du tout comme un littéral String en Java, et bien heureusement, puisque c'est justement un objet modifiable. Smiley smile

Un deuxième test pour t'en convaincre :
alert({} === {});


J'ai "peur" d'avoir mal compris quelque chose ; corrige moi si je me trompe :
- un littéral objet est une instance unique d'Object (les 2 tests le montrent) (objet modifiable par la suite : ça ok) ;
- un new nomObject() (où nomObject est défini manuellement) est un constructeur permettant d'instancier plusieurs objets de type nomObject.

Il me paraît difficile de dire qu'un littéral objet avec des membres/méthodes (l'instanciation) est pareil qu'une instanciation par new nomObject() (avec des membres et méthodes).

Par contre dire que : new Object() est pareil que {} (aucun membre/aucune méthode) ; là d'accord les deux sont des objets de type Object ...
merci pour toutes ces réponses rapide ...il crée donc juste un objet pour lui rajouter des méthode ..

a écrit :

Julien Royer a écrit
<edit>Par curiosité, quelle raison te pousse à te mettre aux "classes d'objets" (d'ailleurs, qu'est-ce que tu appelles comme ça ?) ?</edit>


"classe d'objet" un peu par analogie au Java et pour frimer Smiley murf

et plus sérieusement je m'intéresse à la construction d'objet à partie de document Svg ( xml donc) pour construire des librairies ( je devrais plutot parler de fonctions générales ) et pouvoir manipuler ces objets ( agrandissement, couleur , point de controle ...)

Ainsi en partant d'un objet <rect> défini , je rajoute des méthodes à cet objet pour pouvoir le manipuler plus facilement et garder les étapes des modifications ... mais c'est encore un projet ( un autre membre du Forum Writing-pad travaille dans ce sens également) ...

Mon but final est d'appliquer cela coté Serveur et de manipuler le SVG sans les contraintes inhérentes aux navigateurs ( restera toujours la lecture de tel document ..) avec des JSP et les librairies de Batik

Ps : le Quiz j'ai commecé par les faciles .... ehhhh ben pas toujours si facile et évident Smiley biggrin
Modifié par kzone (26 Jan 2007 - 11:33)
yodaswii a écrit :
Il me paraît difficile de dire qu'un littéral objet avec des membres/méthodes (l'instanciation) est pareil qu'une instanciation par new nomObject() (avec des membres et méthodes).
Oui, d'ailleurs je ne me souviens pas avoir dit le contraire. Smiley smile
Julien Royer a écrit :
Oui, d'ailleurs je ne me souviens pas avoir dit le contraire. Smiley smile


Désolé, je crois que c'est moi qui ait un peu embrouillé le tout Smiley langue Smiley cligne Je ne pensais pas au littéral objet "vide" (si on peut le qualifier ainsi ...) !
kzone a écrit :
tiens pourquoi elle est en version longue l'url !?
Il vaut mieux éviter les sauts de lignes entre les deux balises. Smiley smile
ok pou les Url ....

mais là j'ai u problème entre == et ===

a écrit :

l'opérateur === est l'opérateur d'identité . il vérifie si deux opérandes sont 'identiques' en utilisant une définition stricte de de l'identité.
......
l'opérateur == vérifie s'ils sont égaux


== pour les valeurs restournées et === pour l'objet ou type d'objet retourné ??
kzone a écrit :
... et revoir mes syntaxes en javascript aussi === ???
MDC est ton ami. Smiley smile

"==" peut effectuer une conversion de types, "===" ne le peut pas.

Par exemple :
alert("" == 0); // Affiche "true"
alert("" === 0); // Affiche "false"

Modifié par Julien Royer (26 Jan 2007 - 12:13)