Je suis entré dans le javascript OOP récemment et de plus en plus, j'ai entendu parler de fermetures. Après une journée de torsion dans mon cerveau, je les comprends maintenant * mais je ne vois toujours pas l'avantage d'utiliser un objet. Ils semblent faire la même chose mais je soupçonne qu'il me manque quelque chose.Existe-t-il une raison pratique pour laquelle je choisirais une fermeture sur un objet?
* Je pense que
Modifier
Je viens de passer 20 minutes à essayer d'écrire un exemple en utilisant un compteur écrit comme un objet et un compteur écrit une fermeture. Je suis arrivé à la conclusion que je ne comprends toujours pas les fermetures.
2 Modifier
Ok je suis parvenu à fouet d'un extrêmement exemple simple. Il n'y a pas grand-chose entre les deux, mais je trouve la version de l'objet plus lisible. Pourquoi aurais-je choisi l'un sur l'autre?
/*** Closure way ***/
function closureCounter() {
var count = 0;
return {
increase : function() {
count++;
alert(count);
},
decrease : function() {
count--;
alert(count);
}
};
}
var myCounter = closureCounter();
myCounter.increase();
myCounter.decrease();
/*** Object way ***/
function objCounter() {
var count = 0;
this.increase = function() {
count++;
alert(count);
}
this.decrease = function() {
count--;
alert(count);
}
}
var myCounter = new objCounter();
myCounter.increase();
myCounter.decrease();
Je ne suis pas sûr comprendre. Pouvez-vous donner un exemple des deux choses que vous comparez? J'imagine quelque chose comme 'function (x) {...}' versus peut-être '{f: function (x) {...}}', mais je ne suis pas sûr. – Ken
Les fermetures et les objets sont des concepts distincts et peuvent être utilisés en même temps. Que voulez-vous dire en utilisant des fermetures sur des objets? Pouvez-vous donner un exemple s'il vous plaît? –
L'environnement sur lequel une fonction se ferme n'est pas si différent d'une méthode qui a accès à l'état interne d'un objet. Je le vois plutôt comme une manière différente d'exprimer le même concept. –