Passer un objet a une fonction dont le nom est contenu dans une variable.
3 réponses
WebShaker
Salut.
j'ai dans une variable fct une fonction
et j'ai un objet o.
Genre
var fct = 'ma_fonction';
var o = new mon_objet();
je voudrais savoir comment faire un eval(fct + '(' + o + ')');
c'est a dire comment appeler la fonction contenu dans fct en lui pasant
comme paramètre l'instance d'objet o !
une alernative possible serait d'avoir un objet x et une method dans une
variable.
Même problème
var fct = 'ma_method';
var o = new mon_objet();
Comment appler x.ma_method(o);
J'ai cru qu'avec call j'allais m'en sortir mais non !
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Bruno Desthuilliers
WebShaker a écrit :
Salut.
j'ai dans une variable fct une fonction et j'ai un objet o.
Genre
var fct = 'ma_fonction';
donc tu a "dans" (hem...) 'fct' le *nom* d'une fonction - et non une fonction (nb: en javascript, les fonctions sont des objets à part entière, donc une variable peut référencer une fonction directement...)
var o = new mon_objet();
je voudrais savoir comment faire un eval(fct + '(' + o + ')'); c'est a dire comment appeler la fonction contenu dans fct en lui pasant comme paramètre l'instance d'objet o !
Pourquoi faire un 'eval' ?
Les fonctions définies au "top-level" sont généralement associée à l'objet hôte - donc dans le cas le plus courant (script navigateur) à l'objet window. Et les objets javascript sont essentiellement des tables de hachage. Donc, la syntaxe suivante devrait fonctionner:
window[fct](obj);
Si tu tiens _absolument_ a utiliser 'eval' (ici inutile, et généralement dangereux), tu peux aussi faire plus compliqué:
eval(fct)(obj)
mais bon, c'est un WTF
une alernative possible serait d'avoir un objet x et une method dans une variable. Même problème
var fct = 'ma_method'; var o = new mon_objet();
Comment appler x.ma_method(o);
x['ma_method'](o) ?
Ou plus simplement, associer à 'fct' nom pas le nom, mais la fonction elle-même.
function yadda(obj) { // code ici }
var fct = yadda; var obj = new mon_objet();
fct(obj);
Petite recommandation de lecture : "javascript, la référence", David Flannagan, éditions O'Reilly.
WebShaker a écrit :
Salut.
j'ai dans une variable fct une fonction
et j'ai un objet o.
Genre
var fct = 'ma_fonction';
donc tu a "dans" (hem...) 'fct' le *nom* d'une fonction - et non une
fonction (nb: en javascript, les fonctions sont des objets à part
entière, donc une variable peut référencer une fonction directement...)
var o = new mon_objet();
je voudrais savoir comment faire un eval(fct + '(' + o + ')');
c'est a dire comment appeler la fonction contenu dans fct en lui pasant
comme paramètre l'instance d'objet o !
Pourquoi faire un 'eval' ?
Les fonctions définies au "top-level" sont généralement associée à
l'objet hôte - donc dans le cas le plus courant (script navigateur) à
l'objet window. Et les objets javascript sont essentiellement des tables
de hachage. Donc, la syntaxe suivante devrait fonctionner:
window[fct](obj);
Si tu tiens _absolument_ a utiliser 'eval' (ici inutile, et généralement
dangereux), tu peux aussi faire plus compliqué:
eval(fct)(obj)
mais bon, c'est un WTF
une alernative possible serait d'avoir un objet x et une method dans une
variable.
Même problème
var fct = 'ma_method';
var o = new mon_objet();
Comment appler x.ma_method(o);
x['ma_method'](o) ?
Ou plus simplement, associer à 'fct' nom pas le nom, mais la fonction
elle-même.
function yadda(obj) {
// code ici
}
var fct = yadda;
var obj = new mon_objet();
fct(obj);
Petite recommandation de lecture : "javascript, la référence", David
Flannagan, éditions O'Reilly.
j'ai dans une variable fct une fonction et j'ai un objet o.
Genre
var fct = 'ma_fonction';
donc tu a "dans" (hem...) 'fct' le *nom* d'une fonction - et non une fonction (nb: en javascript, les fonctions sont des objets à part entière, donc une variable peut référencer une fonction directement...)
var o = new mon_objet();
je voudrais savoir comment faire un eval(fct + '(' + o + ')'); c'est a dire comment appeler la fonction contenu dans fct en lui pasant comme paramètre l'instance d'objet o !
Pourquoi faire un 'eval' ?
Les fonctions définies au "top-level" sont généralement associée à l'objet hôte - donc dans le cas le plus courant (script navigateur) à l'objet window. Et les objets javascript sont essentiellement des tables de hachage. Donc, la syntaxe suivante devrait fonctionner:
window[fct](obj);
Si tu tiens _absolument_ a utiliser 'eval' (ici inutile, et généralement dangereux), tu peux aussi faire plus compliqué:
eval(fct)(obj)
mais bon, c'est un WTF
une alernative possible serait d'avoir un objet x et une method dans une variable. Même problème
var fct = 'ma_method'; var o = new mon_objet();
Comment appler x.ma_method(o);
x['ma_method'](o) ?
Ou plus simplement, associer à 'fct' nom pas le nom, mais la fonction elle-même.
function yadda(obj) { // code ici }
var fct = yadda; var obj = new mon_objet();
fct(obj);
Petite recommandation de lecture : "javascript, la référence", David Flannagan, éditions O'Reilly.
WebShaker
Bruno Desthuilliers a écrit :
Pourquoi faire un 'eval' ?
Ben j'y tiens pas specialement :)
Les fonctions définies au "top-level" sont généralement associée à l'objet hôte - donc dans le cas le plus courant (script navigateur) à l'objet window. Et les objets javascript sont essentiellement des tables de hachage. Donc, la syntaxe suivante devrait fonctionner:
window[fct](obj);
Ah bon !!! cela veut dire qu'on ne peut pas avoir une variable dans l'objet window qui porte le meme nom qu'un fonction alors.
Je ne savais pas qu'on pouvait accèder a une fonction directement depuis l'objet window. mais effectivement cela résoudrai mon problème.
mais bon, c'est un WTF
C'est quoi WTF ???
x['ma_method'](o) ?
tiens je vais essayer ca aussi.
function yadda(obj) { // code ici } var fct = yadda; var obj = new mon_objet(); fct(obj);
Non ça c'est pas possible. j'ai juste un nom de fonction dans ma variable et pas la fonction elle meme.
Merci pour toutes ces pistes. Je vais tester tout ca.
Etienne.
Bruno Desthuilliers a écrit :
Pourquoi faire un 'eval' ?
Ben j'y tiens pas specialement :)
Les fonctions définies au "top-level" sont généralement associée à
l'objet hôte - donc dans le cas le plus courant (script navigateur) à
l'objet window. Et les objets javascript sont essentiellement des tables
de hachage. Donc, la syntaxe suivante devrait fonctionner:
window[fct](obj);
Ah bon !!!
cela veut dire qu'on ne peut pas avoir une variable dans l'objet window
qui porte le meme nom qu'un fonction alors.
Je ne savais pas qu'on pouvait accèder a une fonction directement depuis
l'objet window. mais effectivement cela résoudrai mon problème.
mais bon, c'est un WTF
C'est quoi WTF ???
x['ma_method'](o) ?
tiens je vais essayer ca aussi.
function yadda(obj) {
// code ici
}
var fct = yadda;
var obj = new mon_objet();
fct(obj);
Non ça c'est pas possible.
j'ai juste un nom de fonction dans ma variable et pas la fonction elle meme.
Merci pour toutes ces pistes.
Je vais tester tout ca.
Les fonctions définies au "top-level" sont généralement associée à l'objet hôte - donc dans le cas le plus courant (script navigateur) à l'objet window. Et les objets javascript sont essentiellement des tables de hachage. Donc, la syntaxe suivante devrait fonctionner:
window[fct](obj);
Ah bon !!! cela veut dire qu'on ne peut pas avoir une variable dans l'objet window qui porte le meme nom qu'un fonction alors.
Je ne savais pas qu'on pouvait accèder a une fonction directement depuis l'objet window. mais effectivement cela résoudrai mon problème.
mais bon, c'est un WTF
C'est quoi WTF ???
x['ma_method'](o) ?
tiens je vais essayer ca aussi.
function yadda(obj) { // code ici } var fct = yadda; var obj = new mon_objet(); fct(obj);
Non ça c'est pas possible. j'ai juste un nom de fonction dans ma variable et pas la fonction elle meme.
Merci pour toutes ces pistes. Je vais tester tout ca.
Etienne.
Bruno Desthuilliers
WebShaker a écrit :
Bruno Desthuilliers a écrit :
Pourquoi faire un 'eval' ?
Ben j'y tiens pas specialement :)
Les fonctions définies au "top-level" sont généralement associée à l'objet hôte - donc dans le cas le plus courant (script navigateur) à l'objet window. Et les objets javascript sont essentiellement des tables de hachage. Donc, la syntaxe suivante devrait fonctionner:
window[fct](obj);
Ah bon !!! cela veut dire qu'on ne peut pas avoir une variable dans l'objet window qui porte le meme nom qu'un fonction alors.
Les fonctions javascript sont des objets.
Je ne savais pas qu'on pouvait accèder a une fonction directement depuis l'objet window. mais effectivement cela résoudrai mon problème.
function yadda(obj) { // code ici } var fct = yadda; var obj = new mon_objet(); fct(obj);
Non ça c'est pas possible. j'ai juste un nom de fonction dans ma variable
<pedant> En javascript (comme dans la plupart des langages de ce genre - Python, Ruby etc), une variable n'est pas un conteneur de données, c'est un nom associé à un objet. </pedant>
et pas la fonction elle meme.
Ok, mais n'y a t'il pas moyen d'associer cette variable à l'objet fonction lui même plutôt qu'à un nom ?
WebShaker a écrit :
Bruno Desthuilliers a écrit :
Pourquoi faire un 'eval' ?
Ben j'y tiens pas specialement :)
Les fonctions définies au "top-level" sont généralement associée à
l'objet hôte - donc dans le cas le plus courant (script navigateur) à
l'objet window. Et les objets javascript sont essentiellement des
tables de hachage. Donc, la syntaxe suivante devrait fonctionner:
window[fct](obj);
Ah bon !!!
cela veut dire qu'on ne peut pas avoir une variable dans l'objet window
qui porte le meme nom qu'un fonction alors.
Les fonctions javascript sont des objets.
Je ne savais pas qu'on pouvait accèder a une fonction directement depuis
l'objet window. mais effectivement cela résoudrai mon problème.
mais bon, c'est un WTF
C'est quoi WTF ???
http://thedailywtf.com/
x['ma_method'](o) ?
tiens je vais essayer ca aussi.
function yadda(obj) {
// code ici
}
var fct = yadda;
var obj = new mon_objet();
fct(obj);
Non ça c'est pas possible.
j'ai juste un nom de fonction dans ma variable
<pedant>
En javascript (comme dans la plupart des langages de ce genre - Python,
Ruby etc), une variable n'est pas un conteneur de données, c'est un nom
associé à un objet.
</pedant>
et pas la fonction elle
meme.
Ok, mais n'y a t'il pas moyen d'associer cette variable à l'objet
fonction lui même plutôt qu'à un nom ?
Les fonctions définies au "top-level" sont généralement associée à l'objet hôte - donc dans le cas le plus courant (script navigateur) à l'objet window. Et les objets javascript sont essentiellement des tables de hachage. Donc, la syntaxe suivante devrait fonctionner:
window[fct](obj);
Ah bon !!! cela veut dire qu'on ne peut pas avoir une variable dans l'objet window qui porte le meme nom qu'un fonction alors.
Les fonctions javascript sont des objets.
Je ne savais pas qu'on pouvait accèder a une fonction directement depuis l'objet window. mais effectivement cela résoudrai mon problème.
function yadda(obj) { // code ici } var fct = yadda; var obj = new mon_objet(); fct(obj);
Non ça c'est pas possible. j'ai juste un nom de fonction dans ma variable
<pedant> En javascript (comme dans la plupart des langages de ce genre - Python, Ruby etc), une variable n'est pas un conteneur de données, c'est un nom associé à un objet. </pedant>
et pas la fonction elle meme.
Ok, mais n'y a t'il pas moyen d'associer cette variable à l'objet fonction lui même plutôt qu'à un nom ?