如何使用相同名称但参数相似的JavaScript函数调用

时间:2018-10-31 13:55:00

标签: javascript overloading

我有2个JavaScript函数相似,但是其中一个具有硬编码变量,而另一个函数的变量将在调用时定义。抱歉,如果我说的没有意义,但是这里有代码,您可以更轻松地理解它:

    function calculateCircumference()
    {
        var radius = 3;
        var circumference = Math.PI * 2 * radius;
        console.log("The circumference is " + circumference);
    }
    
    function calculateArea()
    {
        var radius = 3;
        var area = Math.PI * radius * radius;
        console.log("The area is " + area);
    }
    
    function calculateCircumference(radius)
    {
        var circumference = Math.PI * 2*radius;
        console.log("The circumference is " + circumference);
    }
    
    function calculateArea(radius)
    {
        var area = Math.PI * radius*radius;
        console.log("The area is " + area);
    }
    
    calculateCircumference();
    calculateArea();
    calculateCircumference(5);
    calculateArea(9);

输出:

The circumference is NaN
The area is NaN
The circumference is 31.41592653589793
The area is 254.46900494077323

我知道,如果我更改第二个calculateCircumferencecalculateArea的函数名称,则整个代码将起作用,但是我在做什么呢?这是在输出NaN时显示的这两个函数名都一样吗?

或者这整个事情是完全错误的,不可能吗?

非常感谢您的帮助,谢谢

2 个答案:

答案 0 :(得分:5)

您最初的问题描述了function overloading,但是JavaScript不支持它(没有hack)。相反,可以解决您问题的是可能的默认参数。

ES6 起,您可以直接在函数声明中设置默认参数:

function calculateCircumference(radius=3) {
    var circumference = Math.PI * 2 * radius;
    console.log("The circumference is " + circumference);
}

calculateCircumference();
calculateCircumference(5);

输出

The circumference is 18.84955592153876
The circumference is 31.41592653589793

对于 ES6之前的版本,您需要检查变量是否在函数内部设置:

    function calculateCircumference(radius) {
        radius = typeof radius !== 'undefined' ? radius : 3;
        var circumference = Math.PI * 2 * radius;
        console.log("The circumference is " + circumference);
    }

    calculateCircumference();
    calculateCircumference(5);

输出

The circumference is 18.84955592153876
The circumference is 31.41592653589793

答案 1 :(得分:4)

使用默认值

\\

不带参数调用dat <- "<tr><td>1</td><td>11 Com</td><td>b</td><td>Radial Velocity</td><td>1</td><td>326.03</td><td>1.29</td><td></td><td>19.4</td><td></td><td>2.7</td></tr>" a<-gsub("<tr>",0,dat) a<-gsub("<td>",0,a) a<-gsub("<\\/td>",0,a) a<-gsub("<\\/tr>",0,a) a [1] "0010011 Com00b00Radial Velocity0 \n0100326.03001.29000019.4000 \n02.700" 将默认使用3作为半径