JavaScript中的方法重载

我在Javascript代码中使用以下方法重载。


function somefunction()

{

    //1st function

}


function somefunction(a)

{

   //2nd function

}


function somefunction(a,b)

{

   //3rd function

}


somefunction(); // function call goes here

我不明白的是,如果我调用somefunction()javascript应该调用第一个函数,但是问题是javascript实际上调用了第三个函数。这是为什么?如何调用第一和第二函数?这是什么原因呢?有没有适当的方法可以在Javascript中实现方法重载?行业标准是什么?


偶然的你
浏览 485回答 3
3回答

慕侠2389804

JavaScript不支持方法重载(如Java或类似方法),您的第三个函数将覆盖之前的声明。而是通过argumentsobject支持变量参数。你可以做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?}你也可以只检查typeof a == "undefined"等,这将允许呼叫somefunction(undefined),其中arguments.length为1。这可能允许使用各种参数进行轻松调用,例如,当您有可能为空的变量时。

慕容708150

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    }}

犯罪嫌疑人X

您只是在somefunction每个新声明中擦除变量。这相当于   window.somefunction = function(...   window.somefunction = function(...   window.somefunction = function(...Javascript不提供方法重载。正确的方法是:定义第三个功能并测试定义了哪些参数只传递一个包含参数的对象(这并没有什么不同,但更干净)
打开App,查看更多内容
随时随地看视频慕课网APP