(13-08-2013, 04:56 PM)niahoo a écrit : Ben oui gaz xenon est une classe puisqu'il l'instancie avec new cegazci. D'ailleur il utilise bien new et pas des closures.
Il utilise new sur ce qui est censé être une closure, ça saute aux yeux quand même. Comme quoi ça choque plus personne de voir du JS fait n'importe comment :roll:
Un code acceptable imo :
GasList = {}
GasList.Xenon = function() {};
GasList.Xenon.prototype.greeting = function() {
console.log('Je suis rare, donc précieux');
};
GasList.Shale = function() {};
GasList.Shale.prototype.greeting = function() {
console.log('Je pue et je pollue !');
};
GasList.Water = function() {};
GasList.Water.prototype.greeting = function() {
console.log("Y'a de l'eau dans le gaz");
};
var GasFactory = function() {};
GasFactory.make = function(name) {
switch(name) {
case 'Xenon':
return new GasList.Xenon();
break;
case 'Shale':
return new GasList.Shale();
break;
case 'Water':
return new GasList.Water();
break;
default:
throw new TypeError(name + " class does not exists");
}
};
var xenon = GasFactory.make('Xenon');
var shale = GasFactory.make('Shale');
var water = GasFactory.make('Water');
xenon.greeting();
shale.greeting();
water.greeting();
var throwError = GasFactory.make('DoesNotExists');
Une solution plus rapide serait de tester l'existence de la clé dans l'objet Javascript (mais surtout pas comme Xenos l'a fait).