Bonjour,
J'imagine qu'un tas de personnes se sont penchées sur l'émulation de membres privés en Javascript. La méthode la plus connue consiste à créer des variables locales accessibles par getter, directement dans le constructeur de la classe.
Dans de petites classes et pour de petits projets, c'est une solution viable. Cependant, lorsqu'il s'agit de baser un framework dessus, la question des ressources se pose et dissuade le plus souvent.
Existe t-il des méthodes (re)connues et relativement performantes ?
J'ai par ailleurs fait un petit essai :
Que l'on peut implémenter comme ceci :
Tout reste bien évidemment ouvert à toute proposition.
Merci.
J'imagine qu'un tas de personnes se sont penchées sur l'émulation de membres privés en Javascript. La méthode la plus connue consiste à créer des variables locales accessibles par getter, directement dans le constructeur de la classe.
Dans de petites classes et pour de petits projets, c'est une solution viable. Cependant, lorsqu'il s'agit de baser un framework dessus, la question des ressources se pose et dissuade le plus souvent.
Existe t-il des méthodes (re)connues et relativement performantes ?
J'ai par ailleurs fait un petit essai :
var Private = function(oPrototype) {
var F = function(oInstance, called) {
if(arguments.length === 0) return;
if(isBoolean(called) && called === true) {
if(!isString(oInstance.$$private)) {
oInstance.$$private = (parseInt(Math.random() * 1000000) + new Date().getTime()).toString();
this[oInstance.$$private] = new this;
}
return this[oInstance.$$private];
}
return F.call(F, oInstance, true);
};
F.prototype = oPrototype;
return F;
};
Que l'on peut implémenter comme ceci :
(function() {
var P = new Private({
member1: null,
member2: null
});
MyClass = function(p1, p2, p3) {
P(this).member1 = p1;
P(this).member2 = p2;
this.member3 = p3;
};
MyClass.prototype = {
getMember: function(num) {
return P(this)["member" + num];
}
// ...
};
})();
Tout reste bien évidemment ouvert à toute proposition.
Merci.