Bonjour,

J'ai une fonction jquery que j'utilise dans toutes mes pages qui prend plusieurs paramètres. Aujourd'hui je dois rajouter un paramètre à la fonction et de devoir rajouter un Xeme paramètre ne me plait pas car je ne trouve pas cela "beau", je dois rajouter une ligne pour définir la valeur par défaut. Donc sous la douche je me suis dis pourquoi ne pas utiliser un objet pour les paramètres comme dans les plugins.

A présent je suis super content, tout marche bien et c'est super "beau" (à mon goût). Brtef tout va bien dans le meilleur des mondes.

SAUF....

Ben y a quelques pages à modifier et j'avoue que j'ai un peu la flemme de le faire, donc je me suis dis je vais essayer de faire un système qui accepte l'ancienne version à savoir : function XXX(v1,v2,v3,v4,v5) et la nouvelle façon function YYY ({v1: xxx, v2: x})

Voilà mon soucis c'est que je ne vois pas comment faire..

Merci de toute aide

4 réponses


ClementParis
Réponse acceptée

Mmmmh... Je comprends pas pourquoi tu veux faire ça. Ça n'a pas de sens, la définition d'une fonction accepte toujours un certain nombre de paramètres d'un type de données particulier. D'accord, JavaScript est un langage non typé mais c'est pas la fête du slip non plus ^^

Le problème, c'est qu'avec une liste d'argument à la suite, tu y accèdes comme ça :

function name (arg1, arg2, arg3, arg4) {
    console.log(arg1) // écrit 'popol' dans la console
    console.log(arg2) // écrit '45' dans la console
    // etc...
}
name('popol', 45, 'abc', 'def');

Alors qu'avec un objet tu y accèdes comme ça :

function name (args) {
    console.log(args.arg1) // écrit 'popol' dans la console
    console.log(args.arg2) // écrit '45' dans la console
    // etc...
}
name({
    arg1: 'popol',
    arg2: '45',
    arg3: 'abc',
    arg4: 'def'
});
}

Ça voudrait dire que ta fonction doit pouvoir accepter un seul argument ou plusieurs, au choix ? C'est pas très logique.
La solution ça serait de faire ça :

function name (arg1, arg2, arg3, arg4) {
    if(typeof arg1 === 'object') {
        arg1 = arg1.arg1;
        arg2 = arg1.arg2;
        arg3 = arg1.arg3;
        arg4 = arg1.arg4;
        // Et avec une boucle for on peut rendre ça plus court
    }
    console.log(arg1) // écrit 'popol' dans la console
    console.log(arg2) // écrit '45' dans la console
    // etc...
}
name('popol', 45, 'abc', 'def');
name({
    arg1: 'popol',
    arg2: '45',
    arg3: 'abc',
    arg4: 'def'
});

Mais bon, dans tous les cas c'est très très sale de faire ça, l'idéal ça serait d'utiliser soit l'un soit l'autre, même si ça te prend plus de temps à faire.

Bonsoir,

Dans une fonction, la variable arguments est un array contenant les paramètres transmis à la fonction

cordialement

Antho

Oui bien sur mais on avance en rien dans ma question :)

Peut être n'ai-je pas été assez clair. Donc je voudrais avoir les 2 écritures possibles pour la fonction

Core.Init({
    'v1': 'popol', 
    'v2': 45
});

et

Core.Init('popol', 45);

Ahh oui pas con du tout. Merci

Je sais que ce n'est pas très propre mais malheureusement je ne suis pas le seul à utiliser le script et les forcer à faire la maj ne me semble pas la meilleur solution. Je vais bien préciser dans les specs que la méthode à plusieurs paramètres est deprecated et je ferai le code vraiment propre qu'à la prochaine grosse release. Ainsi je leur aurai laissé le temps de tout toucher

Je te remercie beaucoup