所以我一直这样做,只要我记得,但我很好奇这是不是我应该做的.你编写一个带参数的函数,所以你预计它有一个值,但如果没有,你有充分的理由将它默认为零.我目前所做的是编写辅助函数:
function foo() { return foo(0); };
function foo(bar) { ... };
Run Code Online (Sandbox Code Playgroud)
我刚刚跑过一个我做过这个的实例,在理解我背后的逻辑之前,我奇怪地看了几秒钟.我来自php,它很简单:
function foo(bar=0) { ... }
Run Code Online (Sandbox Code Playgroud)
有没有我不知道的javascript替代品?
Anu*_*rag 17
您不能在JavaScript中使用重载函数.而是使用基于对象的初始化,或检查值并在未提供时指定默认值.
在您的示例中,第二个函数foo(bar)将替换第一个函数.
这是一个使用对象初始化的函数.
function foo(config) {
extend(this, config);
}
Run Code Online (Sandbox Code Playgroud)
where extend是一个将config对象与当前对象合并的函数.它类似于$.extendjQuery中的方法或$extendMooTools的方法.
调用该函数并将其命名为键值对
foo({ bar: 0 });
Run Code Online (Sandbox Code Playgroud)
另一种初始化方法是查看提供的值,如果未给出值,则指定默认值
function foo(bar) {
bar = bar || 0;
}
Run Code Online (Sandbox Code Playgroud)
只要bar不是假值,这就可以工作.所以foo(false)或foo("")仍将初始化bar为0.对于此类情况,请进行明确检查.
function foo(bar) {
bar = (typeof bar == 'undefined' ? 0 : bar);
}
Run Code Online (Sandbox Code Playgroud)
在JavaScript中,如果用户没有传入参数,则参数将是未定义的.您可以使用|| 如果参数的值未定义,则设置参数的值:
function foo(bar) {
bar = bar || 0;
...
}
Run Code Online (Sandbox Code Playgroud)