Tec*_*hie 24 javascript jquery overloading
我在我的Javascript代码中使用如下方法重载.
function somefunction()
{
//1st function
}
function somefunction(a)
{
//2nd function
}
function somefunction(a,b)
{
//3rd function
}
somefunction(); // function call goes here
Run Code Online (Sandbox Code Playgroud)
我不明白的是,如果我调用somefunction()
javascript应该调用第一个函数,但问题是javascript实际上调用第三个函数.这是为什么?如何调用第1和第2功能?这是什么原因?有没有一种在Javascript中实现方法重载的正确方法?什么是行业标准?
Ber*_*rgi 41
JavaScript不支持方法重载(如Java或类似),您的第三个函数会覆盖以前的声明.
相反,它通过arguments
对象支持变量参数.你可以做到
function somefunction(a, b) {
if (arguments.length == 0) { // a, b are undefined
// 1st body
} else if (arguments.length == 1) { // b is undefined
// 2nd body
} else if (arguments.length == 2) { // both have values
// 3rd body
} // else throw new SyntaxError?
}
Run Code Online (Sandbox Code Playgroud)
你也可以只检查typeof a == "undefined"
等,这将允许呼叫somefunction(undefined)
,其中arguments.length
为1
.这可能允许使用各种参数调用缓动器,例如,当您有可能为空的变量时.
JS将传递undefined
给任何未提供的参数.如果你想要重载,你需要做类似下面的代码:
function someFunction(a, b) {
if (typeof a === 'undefined') {
// Do the 0-parameter logic
} else if (typeof b === 'undefined') {
// Do the 1-parameter logic
} else {
// Do the 2-parameter logic
}
}
Run Code Online (Sandbox Code Playgroud)
你只是somefunction
用每个新声明擦除变量.
这相当于
window.somefunction = function(...
window.somefunction = function(...
window.somefunction = function(...
Run Code Online (Sandbox Code Playgroud)
Javascript不提供方法重载.
正确的方法是:
归档时间: |
|
查看次数: |
15210 次 |
最近记录: |