我有一个功能:
function bla(param1) {
// do stuff
}
如果我将其更改为:
function bla(param1, param2) {
// do stuff
}
这会影响函数的工作方式吗?即我可以像这样运行这个函数:
function("one");
像这样:
function ("one", "two");
两者都适用于所有情况吗?如果是这样,第二个参数是否会为空?
我有一个功能:
function bla(param1) {
// do stuff
}
如果我将其更改为:
function bla(param1, param2) {
// do stuff
}
这会影响函数的工作方式吗?即我可以像这样运行这个函数:
function("one");
像这样:
function ("one", "two");
两者都适用于所有情况吗?如果是这样,第二个参数是否会为空?
不,javascript 不知道签名。但是您可以执行以下操作:
function suchandso(){
switch (arguments.length) {
case 1: /*...*/ break;
case 2: /*...*/ break;
case n: /*...*/ break;
default: /*...*/
}
}
好吧,这几乎不是您所谓的重载,但是您尝试做的事情是允许的:
function f(a,b)
{
if (b === undefined)//or typeof b === 'undefined'
{
console.log('Only param a was passed to me');
return;//end function
}
console.log('Both params were passed');
}
当然,现在如果我要显式调用 set to undefined ,上面的代码将不会接受这一点f
。b
这就是对象进来的地方arguments
:
function f(a,b)
{
if (b === undefined && arguments.lenght < 2)//or typeof b === 'undefined'
{
console.log('Only param a was passed to me');
return;//end function
}
b = b || 'default value';//fix possibly undefined value
console.log('Both params were passed');
}
或者,您可以一直使用单个参数,并将其视为对象文字:
function f(o)
{
o = o || {a: 'foo', b: 'bar'};//default object literal
var a = o.a || 'default a',
b = o.b || 'default b';
}
你有很多选择,我会说
JavaScript 不支持方法重载,最后一个函数将优先于所有其他函数。如果您希望使用多个变量,其中一些变量可能是可选的或不同的,您始终可以使用检查您的函数typeof
并确定发送了哪些变量集。或者更好的是,您可以使用对象文字{}
并发送不同数量的变量作为键/值对中的参数,您可以根据需要检查和使用它们。例如:
function a(obj) {console.log(obj);}
a({key1: 'value1', key2: 'value2'}); // and so on...