Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Passer un objet a une fonction dont le nom est contenu dans une variable.

3 réponses
Avatar
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 !

Merci
Etienne

3 réponses

Avatar
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.
Avatar
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.
Avatar
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.

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 ?