J'ai regardé d'un discours de Douglas Crockford sur les bonnes pièces en Javascript et mes yeux ont été ouverts. A un moment, il dit quelque chose comme, "Javascript est la seule langue où les bons programmeurs pensent qu'ils peuvent l'utiliser de façon efficace, sans l'apprendre." Puis j'ai réalisé, je suis ce gars-là.
Dans son discours, il a fait des déclarations qui pour moi, ont été assez surprenant et perspicace. Par exemple, le JavaScript est le plus important de la programmation de langue sur la planète. Ou il est le plus populaire de langue sur la planète. Et, qu'il est divisé en de nombreuses façons sérieuses.
Le plus surprenant déclaration qu'il a faite, pour moi, c'était "nouveau, c'est dangereux". Il ne l'utilise pas plus. Il n'est pas utiliser this
soit.
Il a présenté un modèle intéressant pour un constructeur en Javascript, qui permet privé et public des variables membres et s'appuie sur le ni new
ni this
. Il ressemble à ceci:
// neo-classical constructor
var container = function(initialParam) {
var instance = {}; // empty object
// private members
var privateField_Value = 0;
var privateField_Name = "default";
var privateMethod_M1 = function (a,b,c) {
// arbitrary
};
// initialParam is optional
if (typeof initialParam !== "undefined") {
privateField_Name= initialParam;
}
// public members
instance.publicMethod = function(a, b, c) {
// because of closures,
// can call private methods or
// access private fields here.
};
instance.setValue = function(v) {
privateField_Value = v;
};
instance.toString = function(){
return "container(v='" + privateField_Value + "', n='" + privateField_Name + "')";
};
return instance;
}
// usage
var a = container("Wallaby");
WScript.echo(a.toString());
a.setValue(42);
WScript.echo(a.toString());
var b = container();
WScript.echo(b.toString());
EDIT: le code mis à jour pour passer en minuscules nom de la classe.
Ce modèle a évolué à partir de Crockford antérieure de l'utilisation de modèles.
Question: utilisez-vous ce genre de constructeur modèle? Trouvez-vous qu'il compréhensible? Avez-vous une meilleure?