Tout d'abord, s'il vous plaît éviter cette syntaxe:
var mystuff=function(){...}();
Il est mauvais de codage pratique car il est pas complètement multi-navigateur que quelques navigateurs erreur ici. Habituez-vous à mettre entre parenthèses autour de la fonction comme ceci: \
var mystuff=(function(){...})();
Nextly, en ce qui concerne le motif. Ce modèle est plus communément appelé "encapsulation" en JavaScript. Fermetures est un autre mais peut-être plus spécifiquement, il est purement encapsulation dans ce cas.
L'encapsulation signifie simplement que certains membres sont privés. Qu'est-ce qui est privé dans ce cas? Bien la variable blah est privée dans ce cas. S'il vous plaît prenez l'habitude de procéder aux membres privés avec un soulignement pour indiquer qu'ils sont privés. C'est une bonne pratique de codage de distinguer les méthodes publiques des méthodes privées avec un trait de soulignement.
<script type="text/javascript">
var obj=(function(){
//private members
var _p={};//toss all private members into a single object.
_p.list=[];
_p.init=function(){
_p.list=[];
};
//public members. use "this" to reference object followed by the method.
//however obj._p.list won't be accessible to the global scope
return {
reset:function()
{
_p.init();
}
,addName:function(str)
{
_p.list.push(''+str);//limit to strings
}
,getNames:function()
{
return _p.list.slice(0);//return a clone
}
,alertNames:function()
{
alert(this.getNames().join(","));
}
,getPrivateObj:function()
{
return _p;
}
};
})();
obj.alertNames();
obj.addName("Nandan");
obj.addName("Ram");
obj.alertNames();
obj.reset();
obj.alertNames();
obj.addName("Vinoth");
obj.addName("Kevin");
obj.alertNames();
alert(typeof obj._p);//undefined
var privateObj=obj.getPrivateObj();
alert(typeof privateObj);
alert(privateObj.list.join("|"));
</script>
Raison du vote négatif? – Noldorin