Il y a actuellement 212 visiteurs
Samedi 23 Novembre 2024
accueilactualitésdossierscomparer les prixtélécharger gratuitement vos logicielsoffres d'emploiforum informatique
Connexion
Créer un compte

[Résolu] JS, les boucles et variables avec des fonctions...

Besoin d'aide pour configurer un serveur ? Vous souhaitez obtenir des conseils pour référencer votre site ? Un petit souci pour accéder à votre FTP ? Des soucis de programmation en PHP / ASP / HTML / XHTML / XML / XSLT / CSS / ReactJS / AngularJS / VueJS / CGI / PERL / C / MySQL / PostgreSQL ??? Nous avons peut-être la solution dans ce forum ...

[Résolu] JS, les boucles et variables avec des fonctions...

Message le 26 Juin 2012 19:47

Salut tout le monde ! :)

Alors voilà, j'ai un gros point sur lequel je bloque et demande de l'aide sur celui-ci.
Voici l'histoire :
Code: Tout sélectionner
for (var p in properties) {
    object[p] = function() {
        return another_object[p] ;
    }
}

Le problème de cet algorithme est que le "p" du "return" ne s'applique que lorsque la fonction est appelée, donc "p" sera dans tous les cas égal au dernier élément de properties.

Voici un exemple de résultats :
Code: Tout sélectionner
var object = {} ;
var another_object = {
    a:10, b:11, c:12, d:13
}
var properties = {
    a:1, b:2, c:3, d:4
} ;

//Execution du code précédent...

alert(object['a']()) ;    //Affiche 13.
alert(object['b']()) ;    //Affiche 13.
alert(object['c']()) ;    //Affiche 13.
alert(object['d']()) ;    //Affiche 13.


En HTML/JavaScript c'est simple, il suffit d'ajouter un attribut à l'élément comprenant l'indice d'un tableau par exemple ; mais là, je ne trouve pas de moyen pour garder le bon "p" pour chaque fonctions de object.

Avez-vous une solution ? Merci d'avance pour vos réponses. :)
Avatar de l'utilisateur
Thyrion
Expert(e)
Expert(e)
 
Messages: 1253
Inscription: 25 Aoû 2007 19:49
 


Re: JavaScript, les boucles et variables avec des fonctions.

Message le 26 Juin 2012 22:55

Pas de solutions ? Ben alors ? :P

J'plaisante. :wink: Mais j'ai trouvé une solution pour vous : Le scope.
Code: Tout sélectionner
for (var p in properties) {
    (function() {
        var prop = p ;
        object[prop] = function() {
            return another_object[prop] ;
        }
    })() ;
}

alert(object['a']()) ;    //Affiche 10.
alert(object['b']()) ;    //Affiche 11.
alert(object['c']()) ;    //Affiche 12.
alert(object['c']()) ;    //Affiche 13.


Magique hein ? :D

Comment ça marche ? Les scopes en JavaScript sont des contextes d'exécutions, d'où la difficulté du "this" à gérer.
L'astuce est d'exécuter un univers indépendant, ou plutôt plusieurs univers indépendants (dans cet exemple).
Ce qui veut dire que la fonction n'est jamais "morte", elle existe toujours et on peut l'exécuter à n'importe quel moment.
Or, les variables (var) à l'intérieur sont liées à la fonction, donc privées - Tous les "prop" sont donc uniques.

Et voilà !
Avatar de l'utilisateur
Thyrion
Expert(e)
Expert(e)
 
Messages: 1253
Inscription: 25 Aoû 2007 19:49
 



Sujets similaires

Message [résolu] Appels indésirables
Bonsoir? J'ai besoin d'aide, je n'en peux plus, mon portable est sur liste rouge, j'ai plusieurs appels par jour, d'un cabinet de santé, "santénéa", ils demandent à parler à ma femme, qui est décédée en octobre 2022, je ne comprends pas le lien entre mon numéro de portable et ma femme. ? J ...
Réponses: 27

Message [Résolu] Récupération du dual boot
Bonjour,Pourriez-vous m'aider à remettre le dual boot" sur un pc portable HP modèle G7 1235 SF" qui a Windows 10 et Ubuntu 24.04 que j'ai installé dans " l'espace libre" du disque dur mais au démarrage c'est Ubuntu qui est démarre directement, comment faire ?J'aurai voulu garder ...
Réponses: 13

Message [résolu] Inscris à l'insu de mon plein gré
Bonjour J'ai un souci, qui m'énerve vraiment, ma fille m'a réglé une smart TV, pour que le Chromecast intégré fonctionne elle m'a créé un compte sur google. Presque sur chaque site, j'ai ceci :Sur le site TV loisir, je n'ai pas fait exprès, j'ai cliqué sur ok, au lieu de la croix, ça m'a créé un com ...
Réponses: 3

Message Partition inutilisée [Résolu]
Bonjour à tous !J'ai encore des lacunes (normal vu mon âge....):Après avoir fait du ménage sur mon disque SSD, il y reste Win 8 et Ubuntu 22.04 plus une partition de 6 Go que je voudrais utiliser pour y stocker des sauvegardes non critiques.Elle est nommée "Lost+found"Je ne peux pas avoir ...
Réponses: 3

Message [résolu] C'est le bazar sur mon bureau
Bonjour Quand je veux héberger une image ou autre chose de mon bureau, j'ai ça, maisquescequecestdoncquetoutcestmachins? Merci
Réponses: 8

Message [RÉSOLU] Vidéos invisibles avec Firefox dans un forum
Bonjour à tous.Je ne sais pas si je suis au bon endroit pour poser ma question; ce sous répertoire me semblait le plus approprié.Je fréquente un forum depuis de nombreuses années et je constate que les vidéos postées dans les messages ne s'affichent plus avec Firefox. Quand je regarde le détail des ...
Réponses: 5


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 3 invités


.: Nous contacter :: Flux RSS :: Données personnelles :.