It seems the best way to deal with arguments in javascript functions is to require the caller to pass an associative array:
example = function(options) {
alert('option1: ' + options.a + ', option2: ' + options.b);
}
Now arguments are named and not needed in any particular order when calling this function:
example({'b':'hello option2', 'a':'hello option1'});
The only thing I don't like is I have to have all this extra code to deal with required and default arguments, not to mention not allowing extra arguments so the caller knows they called the function wrong:
example = function(options) {
var required_args = ['a', 'd'];
var default_args = {'b':'option2', 'c':'option3'};
var allowed_args = ['a', 'b', 'c', 'd'];
// check required args
// check allowed args
for (var arg in default_args) {
if (typeof options[arg] == "undefined")
options[arg] = default_args[arg];
}
alert('option1: ' + options.a + ', option2: ' + options.b);
}
Is there a standard way to deal with this? I guess I can create a function like:
deal_with_args(options, required_args, default_args, allowed_args)
And throw some exception if required_args or allowed_args is violated...
The 'standard' form is something like:
function myFunc(required_param, some_param, param_with_default) {
// obviously this needs modifiction (ie use 'typeof' as you did)
// if you're dealing potentially 'falsey' values
param_with_default = param_with_default || 'some default value';
// same caution applies here
if(!required_param) {
// throw some exception here, or return an error code, or whatever
}
// function code
}
Could you do null coalescing for the required args?
alert('option1: ' + (options.a || default_args[a]) + ', option2: ' + (options.b || default_args[b]));
(Edited to correct the operator error)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With