Nested Namespaces

Résolu
Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 - 13 févr. 2008 à 10:33
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 - 13 févr. 2008 à 11:50
Salut:

Est ce qu'il possible d'imbriquer les namespaces en JavaScript?

J'ai essayé de faire comme suit:

var CompanyName = {
    var Domain = {
       methodX: function() {
       },
       ...
       methodZ: function() {
       }
    }
}

Mais ça me fonctionne pas.

6 réponses

cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
13 févr. 2008 à 11:12
euh... pas un expert ( très loin de là ) du vocabulaire dans ce domaine,
    perso je parlerais plutôt de propriété, méthodes, classe...

    j'ai lu sur MSDN :

Simulation des espaces de nom
En C++ et C#, les espaces de nom permettent de réduire la probabilité de collision des noms.
Dans .NET Framework, les espaces de nom différencient la classe Microsoft.Build.Task.Message de
 System.Messaging.Message, par exemple. JavaScript ne dispose pas de
fonctionnalités propres de prise en charge des espaces de noms, mais il est facile de simuler un espace de nom avec des objets.
Supposons que vous deviez créer une bibliothèque JavaScript. Au lieu de définir des fonctions et des classes de façon globale, vous
pouvez les englober dans un espace de nom du type suivant :
var MSDNMagNS = {};
 
MSDNMagNS.Pet = function(name) { // code here };
MSDNMagNS.Pet.prototype.toString = function() { // code };
 
var pet = new MSDNMagNS.Pet(“Yammer”);
L'un des niveaux d'espace de nom peut ne pas être unique.
Vous pouvez donc créer des espaces de nom imbriqués :
 
var MSDNMagNS = {};
// nested namespace “Examples”
MSDNMagNS.Examples = {}; 
 
MSDNMagNS.Examples.Pet = function(name) { // code };
MSDNMagNS.Examples.Pet.prototype.toString = function() { // code };
 
var pet = new MSDNMagNS.Examples.Pet(“Yammer”);
Inutile de préciser que la saisie de ces espaces de nom longs et imbriqués devient vite fastidieuse. Fort heureusement, les utilisateurs de
votre bibliothèque peuvent facilement créer un alias de votre espace de nom sous une forme beaucoup plus abrégée :
// MSDNMagNS.Examples and Pet definition...
 
// think “using Eg = MSDNMagNS.Examples;” 
var Eg = MSDNMagNS.Examples;
var pet = new Eg.Pet(“Yammer”);
alert(pet);
Si vous examinez le code source de la bibliothèque AJAX de Microsoft, vous pouvez constater que les auteurs de la bibliothèque
emploient une technique similaire pour implémenter les espaces de nom (observez particulièrement l'implémentation de la méthode
statique Type.registerNamespace). Voir l'encadré « Programmation orientée objet et ASP.NET AJAX » pour plus d'information

MSDN Home > MSDN Magazine > May 2007
JAVASCRIPT     Créer des applications Web avancées avec des techniques orientées objet
 

<hr />                Cordialement            Bul         «mon Site»     «M'écrire»
3
Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
13 févr. 2008 à 11:28
Salut:

Merci infiniment, pour ces références. Maintenant tout est claire comme le crystale

CompanyName = {};

CompanyName.Util = {
    methodA: function() {
       // Code
    },
    methodB: function(){
       // Code
    }
};

Cordialement ...
3
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
13 févr. 2008 à 10:59
Bonjour,

namespace ou Naming space

Zone de déclaration qui permet de délimiter la recherche des noms des identificateurs par le compilateur compilateur.

Le but des espaces de nommage est essentiellement de
regrouper logiquement les identificateurs et d'éviter
les conflits de
noms entre plusieurs parties d'un même projet. Par exemple, si deux
programmeurs utilisent le
même nom pour deux structures différentes
dans deux fichiers séparés, un conflit entre ces deux structures
aura
lieu au mieux à l'édition de liens, et au pire lors de l'utilisation
commune des sources de ces deux
programmeurs. Ce type de conflit
provient du fait que les langages comme le =C C ne fournissent qu'un seul
espace de nommage de portée globale, dans lequel il ne doit y avoir aucun conflit de nom. Grâce aux
espaces de nommage non globaux, ce type de problème peut être plus facilement évité.

Exemple en C++
1<code> 
</code>,
inti=1;    // i est global. <code>
</code>, ----
2<code> 
</code>,
 <code>
</code>, ----
3<code> 
</code>,
namespaceA <code>
</code>, ----
4<code> 
</code>,
{ <code>
</code>, ----
5<code> 
</code>,
    inti=2;// i de l'espace de nommage A. <code>
</code>, ----
6<code> 
</code>,
    intj=i;// Utilise A::i. <code>
</code>, ----
7<code> 
</code>,
} <code>
</code>, ----
8<code> 
</code>,
 <code>
</code>, ----
9<code> 
</code>,
intmain(void) <code>
</code>, ----
10<code> 
</code>,
{ <code>
</code>, ----
11<code> 
</code>,
    i=1;     // Utilise ::i. <code>
</code>, ----
12<code> 
</code>,
    A::i=3;  // Utilise A::i. <code>
</code>, ----
13<code> 
</code>,
    return 0; <code>
</code>, ----
14<code> 
</code>,


lu chez http://www.alaide.com/dico.php?q=namespace&ix=3101

pas sûr de voir réellement rapport avec l'exemple donné ?

quel est le but....   ici, en javascript ?

<hr />                Cordialement            Bul         «mon Site»     «M'écrire»
0
Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
13 févr. 2008 à 11:00
Salut:

Beaucoup de bibliothèques JavaScript (ExtJs, ...) utilisent les namespaces





var myReader = newExt.data.ArrayReader(...);

Si on prend cette déclaration, est ce qu'on peut dire que Ext.data est un namespace?

Cordialement ...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
13 févr. 2008 à 11:05
Salut Bultez:

Je souhaite utiliser la même syntaxe utilisée par ExtJs(Ext.data.ArrayReader, ...) pour en prendre comme modèle et convention pour élaborer mes scripts.

J'ai fait une recherche sur Google, mais je ne trouves une réponse satisfaisante.
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
13 févr. 2008 à 11:50
tu étais très très proche...   nickel si ça baigne.
ah... ces histoires de syntaxe qui bloquent tout...
qu'on ne peut pas inventer et dont les docs parlent peu voire pas !
<hr />                Cordialement            Bul         «mon Site»     «M'écrire»
0
Rejoignez-nous