54 votes

Accès aux variables piégées par la fermeture

Je me demandais s’il y avait un moyen d’accéder aux variables piégées par fermeture dans une fonction de l’extérieur de la fonction; Par exemple, si j’ai :

existe-t-il un moyen d’y accéder dans une instance de . Quelque chose comme :

26voto

lama12345 Points 169

Une simple évaluation à l’intérieur de la portée de fermeture peut toujours accéder à toutes les variables :

Mais vous ne pouvez pas écraser directement une méthode, qui accède à l’étendue de fermeture (comme getUsername()), vous avez également besoin d’une simple astuce d’évaluation:

22voto

psmay Points 891

Les variables à l’intérieur d’une fermeture ne sont en aucun cas directement accessibles de l’extérieur. Cependant, les fermetures à l’intérieur de cette fermeture qui ont une portée variable peuvent y accéder, et si vous rendez ces fermetures accessibles de l’extérieur, c’est presque aussi bon.

Voici un exemple :

J’espère que c’est un peu utile pour vous...

10voto

traveller Points 81

Les réponses ci-dessus sont correctes, mais elles impliquent également que vous devrez modifier la fonction pour voir ces variables fermées.

Redéfinir la fonction avec les méthodes getter fera la tâche. Vous pouvez le faire dynamiquement. Voir l’exemple ci-dessous

vous pouvez maintenant accéder au message en appelant b.getMesage()

Bien sûr, vous devrez faire face à plusieurs appels à alertMe, mais ce n’est qu’un simple morceau de code prouvant que vous pouvez le faire.

4voto

mwilcox Points 2091

Tout l’intérêt de ce modèle est d’empêcher l’accès à « c » à l’extérieur. Mais vous pouvez accéder à foo() en tant que méthode, alors faites-en sorte qu’il verra 'c' dans son champ d’application:

2voto

Gareth Points 42402

Non, pas sans une fonction getter sur laquelle retourne

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X