Je disais "crade" pour le code en général et la mauvaise maitrise des concepts Javascript.
Ca ça ne se fait pas. Ecris comme tel c'est une classe ListeGaz qui a une méthode gazXenon en closure et qui devrait être appelée sous la forme new ListeGaz().gazXenon()
Si tu veux garder les closures avec un espace de nom tu peux faire :
Et la solution pour les prototypes je l'ai donnée.
Pour coller à ce que veut Argorate on peut faire (comme je proposais en dernier) :
De même on ne teste pas l'existence d'une clé en JS comme tu l'as fais
Et encore ce que je viens de mettre c'est pas terrible, car si tu passes "constructor" au param name, tu passeras bien dans le if s'il s'agit d'un objet. De mémoire c'est quelque chose comme Object.prototype.hasOwnProperty.call(GasList, name) la méthode "safe".
function ListeGaz()
{
this.GazXenon = function ()
{
}
}
new ListeGaz.GazXenon();
Ca ça ne se fait pas. Ecris comme tel c'est une classe ListeGaz qui a une méthode gazXenon en closure et qui devrait être appelée sous la forme new ListeGaz().gazXenon()
Si tu veux garder les closures avec un espace de nom tu peux faire :
var ListeGaz = {
GazXenon: function() {
};
};
new ListeGaz.GazXenon();
Et la solution pour les prototypes je l'ai donnée.
Pour coller à ce que veut Argorate on peut faire (comme je proposais en dernier) :
GasFactory.make = function(name) {
if (GasList.hasOwnProperty(name)) {
return new GasList[name];
}
else {
throw new TypeError(name + " class does not exists");
}
};
De même on ne teste pas l'existence d'une clé en JS comme tu l'as fais
Et encore ce que je viens de mettre c'est pas terrible, car si tu passes "constructor" au param name, tu passeras bien dans le if s'il s'agit d'un objet. De mémoire c'est quelque chose comme Object.prototype.hasOwnProperty.call(GasList, name) la méthode "safe".