我有一个带有许多参数的函数,并且有许多默认值。
function foo(p1 ,p2, p3, p4, p5, p6){
var p1 = p1 || 'default1';
var p2 = p2 || 'default2';
var p3 = p3 || 'default3';
var p4 = p4 || 'default4';
var p5 = p5 || 'default5';
var p6 = p6 || 'default6';
}
我怎样才能成功只定义p1和p6,而不是其余的?
我知道在Scala你可以做foo(p1='something1',p6='something6')
答案 0 :(得分:5)
您应该使用具有参数属性的对象。
例如:
function foo(options) {
var p1 = options.p1 || 'default1';
...
}
foo({ p1: 3, p6: "abc" });
答案 1 :(得分:2)
您可以使用一个作为对象的参数,并为默认值执行jQuery扩展,如:
function foo(args) {
jQuery.extend({
p1: 'default1',
p2: 'default2',
p3: 'default3',
p4: 'default4',
p5: 'default5',
p6: 'default6'
}, args);
}
foo({p1: 'one', p6: 'six'});
要扩展的第二个参数中定义的任何属性都将覆盖第一个参数中的属性。
答案 2 :(得分:1)
这些被称为“命名参数”,并且有几个教程(使用@ SLaks答案中的对象):
http://www.javascriptkit.com/javatutors/namedfunction.shtml(另见第2页关于检测哪些参数可靠传递; ||
并不总是有效)