[javascript] portée du this - Version imprimable +- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org) +-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38) +--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51) +--- Sujet : [javascript] portée du this (/showthread.php?tid=6564) Pages :
1
2
|
[javascript] portée du this - Ter Rowan - 09-01-2013 Plop je suis sur que la réponse est toute bête mais mes quelques recherches non rien donné (je pourrais pousser plus loin mais c est un jour ou j ai pas le moral, si ca peut tomber tout cru c est top) je m essaie à la programation objet en javascript, en croisant avec du jquery, et j'ai un souci avec la portée du this.toto
mon alert(this.container) me renvoie undefined alors que le simple av_container me renvoie ce qu'il faut bon je pense que le fait d être rentré dans une autre fonction me fait péter le this mais comment faire pour appeler les données de "av" ? merci de votre aide RE: [javascript] portée du this - Sephi-Chan - 09-01-2013 En l'occurence, la méthode $.each donne une nouvelle valeur à this dans la fonction de callback (on dit alors qu'on bind la fonction avec une valeur donnée). Si je ne m'abuse, il s'agit ici de l'élément itéré (la même chose que component ).Si tu veux accéder à container , il faut faire quelque chose comme var me = this quelque part au dessus de l'appel à $.each . Ainsi, dans le callback tu pourras faire me.container .
RE: [javascript] portée du this - Ter Rowan - 09-01-2013 oki, merci je laisse ouvert, je vais surement revenir, avec les événements (et le this...) a+ RE: [javascript] portée du this - srm - 09-01-2013 $.each(this.components, function(key, component) { alert(this.container); }).bind(this) bind permet d'affecter une variable dans le scope. RE: [javascript] portée du this - Maks - 09-01-2013 C'est un classique du JS, t'as vraiment pas beaucoup cherché en effet ^^ Tu peux faire de la conservation de contexte comme Sephi et oxman l'ont proposé, je rajouterais _.bind et _.bindAll de la librairie underscore, qui est cross-browser et plus complet que Function::bind et peut être plus propre que me/that/self = this. Aussi tu devrais respecter les conventions Javascript : UpperCamelCase pour le nom d'une classe, camelCase pour le reste (et non snake_case). Enfin je déclarerais une classe façon coffeescript :
RE: [javascript] portée du this - Ter Rowan - 09-01-2013 (09-01-2013, 04:57 PM)oxman a écrit : $.each(this.components, function(key, component)autant appeler la variable (version Sephi) marche, autant (et j'aurais trouvé ça plus sympa) en mettant le bind là, j'ai une erreur dans la console : Citation :TypeError: $.each(...).bind is not a function (09-01-2013, 06:06 PM)Maks a écrit : C'est un classique du JS, t'as vraiment pas beaucoup cherché en effet ^^ben pas longtemps non mais quand même, le plus frustrant, c est que j'avais vu des articles intéressants à ce sujet, mais incapable de les retrouver (et google pas au top aujourd'hui, ou bien c est moi, je suis tombé que sur des sujets plus cons que moi, et pourtant je suis au taquet, question conneries sur js) (09-01-2013, 06:06 PM)Maks a écrit : Aussi tu devrais respecter les conventions Javascript : UpperCamelCase pour le nom d'une classe, camelCase pour le reste (et non snake_case).oui c'était un peu pourri, je suis d'habitude en camel (les deux comme tu dis), la le snake était uniquement pour les tests (09-01-2013, 06:06 PM)Maks a écrit : Enfin je déclarerais une classe façon coffeescript :pff... là ça me parle pas du tout comme syntaxe, je comprends rien, c'est fou comme javascript ne me parle pas beaucoup alors que c++ et compagnie me semblent "naturels" (en syntaxe, je suis pas une star loin de là) sinon, j'essaie de partie de code existant pour m'imprégner est ce que ce type de code vous semble propre ? (peu importe l'intéret de la fonctionnalité, c'est la manière de coder que je regarde) RE: [javascript] portée du this - srm - 09-01-2013 J'ai dit }).bind(this) pas })).bind(this) Donc en gros c'est : }).bind(this)) si tu mets tout le code RE: [javascript] portée du this - Maks - 09-01-2013 Fais une recherche genre "understanding this in javascript" sur google Dans le procédural il n'y a pas beaucoup de différence de syntaxe entre c++ et JS. Il faut juste connaître quelques points : conservation de contexte, closures, fonctionnement des prototypes... J'ai pas regardé le code en détails mais mis à part le non emploi du triple égal, ce code m'a l'air correct. Mais bon ça n'est pas un code objet ^^ RE: [javascript] portée du this - Ter Rowan - 09-01-2013 (09-01-2013, 06:44 PM)oxman a écrit : J'ai dit }).bind(this) pas })).bind(this) tin j'avais pas de ( devant function toi non plus d'ailleurs :p effectivement ça marche comme cela... merci
(09-01-2013, 06:50 PM)Maks a écrit : Fais une recherche genre "understanding this in javascript" sur google oui dans le procédural c'est "facile", du moins j'y arrive, mais dès que je passe en objet, je pars dans les choux. Maintenant rien ne m empêche de faire du procédural, si j'obtiens le résultat merci pour la lecture RE: [javascript] portée du this - Angelblade - 10-01-2013 Bien que ce soit le comportement commun en javascript, jQuery ne propose par de passer le contexte en tant qu'argument
|