Il y a actuellement 376 visiteurs
Vendredi 29 Mars 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] comment utiliser opera
Bonjour J'ai installé opera, je n'arrive pas à le mettre en français ? Il y a aussi la page d'accueil qui me gêne, pleine de petites fenêtres qui ne m'intéressèrent pas. Merci
Réponses: 13

Message [Résolu] Impossible lancer Windows défender hors ligne WIN10
Salut à vous j'ai voulu lancer Windows Defender hors ligne et malgré plusieurs tentatives et démarrages, il ne se passe rien je suis allé sur mon disque dur C où est installé Windows Defender et puis sur offline j'ai cliqué sur en administrateur : OfflineScannerShellet voici le message Je précis ...
Réponses: 64

Message mot de pass [Résolu]
bonjour quand j'allume le pc il demande un mot de passe et option de connexion ..comment je peu supprimé ça pour que l'ordi s'allume sans cet option ...si y a moyen ça sera bien ps: installation Windows car j'ai remplacé mon DD par un SSD ce week-endmerci
Réponses: 23

Message [Résolu]Paramètrage de mon profil
Bonjour, Lorsque je veux ajouter une signature dans mon profil ==> Modifier la signature, la visualisation de celle-ci se fait bien mais lorsque je valide, rien apparait sous mes messages. Il y a t-il un temps de délai pour voir apparaitre ma signature en bas de mes messages (normalement cela do ...
Réponses: 4

Message [Résolu] Le fameux soucis du "voile blanc" sur un écran.
Bonjour/Bonsoir, je viens à vous aujourd'hui car j'ai acheter un écran LG 24M47VQ-P ( Je crois qu'il s'âgit la de la réph mais je ne suis pas sur ) et lorsque je le branche il fonctionne parfaitement cependant il y a une chose qui me dérange fortement c'est un voile blanc qui viens se mettre sur l'é ...
Réponses: 15

Message [résolu] (tout seul) traducteur google intrusif
Bonjour Dès que je navigue sur un site étranger, j'ai la traduction de google, je n'en veux pas, il y a moyen de s'en débarrasser ? Merciici :J'éditeOui déjà Je n'avais pas assez cherché, normalement, j'ai réussi :Comment désactiver le traducteur ?Activer ou désactiver la traductionSur votre ordin ...
Réponses: 5


Qui est en ligne

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


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