cette une pour les gourous javascript:javascript problème accès aux variables privées
J'expérimente avec un nouveau framework javascript. Sa structure est inspirée par nul autre que le puissant jQuery.
Il a une variable globale appelée $j
et .. oh, juste voir en action:
/* file: jfoo.js */
$j = new (function(){
var modules=[];
this.loadModule = function(mod) {
modules[ modules.length ] = mod;
}
this.hasModule = function(mod) {
for(ind in modules)
if(modules[ind]==mod) return true;
return false;
}
})();
Vous voyez que les modules est une variable privée. Aucun problème; c'est exactement ce que j'avais prévu.
Maintenant, je veux écrire un plugin qui ajoute une méthode $j.loadBatch
à mon système. Alors ..
/* file: loadBatch.jfoo.js */
!$j || (function(){
$j.loadBatch = function(batch) {
for(ind in batch)
modules[ modules.length++ ] = batch[ind];
}
})();
Mais, puisque cette méthode ne fait pas partie de la fermeture dans le fichier jfoo.js
, ce n'est pas possible.
J'ai aussi essayé cette version:
/* file: jfoo.js */
$j = new (function(){
var modules=[];
this.loadModule = function(mod) {
modules[ modules.length ] = mod;
}
this.hasModule = function(mod) {
for(ind in modules)
if(modules[ind]==mod) return true;
return false;
}
this.extend = function(extensions) {
for(ext in extensions)
this[ext] = extensions[ext];
}
})();
et
/* file:loadBatch.jfoo.js */
!$j || (function(){
$j.extend({
loadBatch : function(batch) {
for(ind in batch)
modules[ modules.length++ ] = batch[ind];
}
});
})();
Mais j'ai pas de meilleurs résultats.
Ainsi, les questions suivantes:
- Est-il possible que je peux écrire la méthode
loadBatch
dans un fichier séparé et ont toujours accès à la méthode privéemodules
? (Je m'attends à ce que la réponse soit un NON retentissant, mais, qui sait?) - Y at-il un autre moyen par lequel je peux obtenir l'effet désiré sans rendre public
modules
? (Je sais comment procéder si je le rends public) - Est-ce que jQuery utilise des membres privés? comment se débrouille-t-il alors de ses problèmes d'accessibilité privée?
Merci,
HJR
une idée de comment jQuery le fait? Est-ce que jQuery le fait réellement? – jrharshath
jQuery utilise une étape de compilation pour assembler tous les fichiers en un seul avant de les envoyer au client. –