2010-12-09 3 views
0

je la fonction suivante:passer des arguments séparés par des virgules à la fonction js

function calculateAspect(options){ 
    def = { 
     orgw: 0, 
     orgh: 0, 
     tarw: 0, 
     tarh: 0 
    }; 
    o = $.extend(def,options); 
    console.log(o); 


};  
calculateAspect({orgw:640}); 

Et je veux être en mesure de transmettre des valeurs comme suit:

calculatedAspect(640,480,320) 

ou

calculateAspect(200) 

Cela peut ne pas sembler logique étant donné la fonction. Mais je suis juste curieux de savoir comment l'enlever.

+0

Je peux me tromper, mais je pense que vous devez transmettre le tableau, ou vous devez déclarer les arguments directement. –

+0

Que voulez-vous arriver avec ces numéros que vous passez un argument? – RoToRa

Répondre

2

Vous pouvez utiliser arguments qui contient tous les arguments passés:

function calculateAspect(options){ 
    var argNames = ["orgw","orgh","tarw","tarh"]; 
    def = { 
     orgw: 0, 
     orgh: 0, 
     tarw: 0, 
     tarh: 0 
    }; 
    for (var i=0, n=Math.min(arguments.length, 4); i<n; i++) { 
     def[argNames[i]] = arguments[i]; 
    } 
    console.log(o); 
} 
1

Vous auriez à faire votre propre convention pour ce que les paramètres devraient signifier, mais vous pouvez faire quelque chose comme ceci:

function calculateAspect(orgw, orgh, tarw, tarh) { 
    var def = { /* ... */ }; 
    if (arguments.length === 1 && (typeof orgw) === "object") { 
    var o = $.extend(def, orgw); 
    // ... normal code ... 
    } 
    else { 
    calculateAspect({orgw: orgw, orgh: orgh, tarw: tarw, tarh: tarh}); 
    } 
} 

peut-être.

+0

Non, il n'y a pas de façon "intégrée" de le faire - en ce qui concerne Javascript, vous pouvez toujours passer n'importe quel objet (ou n'importe quelle valeur) à n'importe quelle fonction que vous voulez, et cela ne vous dérange pas . Ainsi, le langage n'a absolument aucun moyen de deviner comment vous voulez que vos paramètres d'objet soient interprétés. – Pointy

Questions connexes