Il y a actuellement 73 visiteurs
Mardi 27 Juillet 2021
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] Veille disque dur externe / Port usb
Bonjour à tous,A chaque fois que je branche un disque dur externe celui-ci s'éteint automatiquement au bout de quelques minutes de non utilisation et se rallume dès utilisation. Cela le fait sur 2 DD externes différents. Pourtant, la mise en veille des ports usb pour économiser l'énergie est désacti ...
Réponses: 4

Message [résolu] gimp-> gThumb
Bonjour Je voudrais pouvoir imprimer plusieurs photos sur les mêmes feuilles, ça fait plusieurs jours que je tourne en rond avec gimp sans succès, j'ai suivi plusieurs topics du net mais je n'arrive pas à avoir la même chose. Merci
Réponses: 7

Message [résolu] numéro de portable
Bonjour mes parents n'ont jamais eu de portable, ils se sont décidés hier. Savez vous combien de temps il faut pour qu'ont leur mette en route leur numéro ? C'est à la poste mobile, donc sfr. Il n'y a aucune réponse sur gogole, ce n'est que pour la portabilité, forcément qui n'a pas de portable.. ...
Réponses: 7

Message [RESOLU] PC Tout en Un avec écran cassé...
bonjour à toutes et tousmon écran de pc est cassé, du moins 3 "grosses" rayures qui traversent l'épaisseur de l'écran...pc tout en un HP Omni 27 de 2011.... Sic Tout fonctionne bien mais sur le plan sécurité, y a-t-il une solution ?Si j'appuie sur les morceaux cassés, ils bougent...., en f ...
Réponses: 4

Message [ Résolu ] NVMe VS SSD sata
Bonjour à TousCe matin, j'ai installé un SSD NVMe, Samsung SSD 980 M.2 PCIe NVMe 1 To et je ne comprends pas les résultats du benchmark. Merci d'avanceBenchmark du NVMehttps://i.goopics.net/bq0vg.jpgBenchmark du Samsung 860 QVOhttps://i.goopics.net/WqLZ3.jpgLes résultats sont supérieurs en lecture/é ...
Réponses: 5

Message [résolu] Conseil d'achat DD SSD et boitier pour un portable
Bonjour,Je souhaite acheter un nouveau support qui sera utilisé dans un boitier externe puis ensuite qui sera mis dans un portable Toshiba satellite L350.Donc un SSD ou un DD de 300 go serait suffisant voire un peu plus si le portable le peut.Voici sa config actuelleDisque dur actuelDisque dur Disqu ...
Réponses: 13


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité


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