为了账号安全,请及时绑定邮箱和手机立即绑定

JavaScript中的方法重载

JavaScript中的方法重载

偶然的你 2019-10-21 10:15:54
我在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中实现方法重载?行业标准是什么?
查看完整描述

3 回答

?
慕侠2389804

TA贡献1719条经验 获得超6个赞

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。这可能允许使用各种参数进行轻松调用,例如,当您有可能为空的变量时。


查看完整回答
反对 回复 2019-10-21
?
慕容708150

TA贡献1831条经验 获得超4个赞

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

    }

}


查看完整回答
反对 回复 2019-10-21
?
犯罪嫌疑人X

TA贡献2080条经验 获得超4个赞

您只是在somefunction每个新声明中擦除变量。


这相当于


   window.somefunction = function(...

   window.somefunction = function(...

   window.somefunction = function(...

Javascript不提供方法重载。


正确的方法是:


定义第三个功能并测试定义了哪些参数

只传递一个包含参数的对象(这并没有什么不同,但更干净)


查看完整回答
反对 回复 2019-10-21
  • 3 回答
  • 0 关注
  • 470 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信