两个具有相同名称的Javascript函数始终调用相同的参数化函数

时间:2017-02-28 07:03:35

标签: javascript c#

我有两个具有相同名称但功能定义不同的JavaScript函数(一个是参数少,另一个是两个参数)。当我尝试从代码隐藏调用参数less函数时,它总是调用参数化函数。但是当我删除paramterized函数时,将调用没有参数的函数。我想知道为什么会这样:

e.g;

<script>
function A()
{
  alert(1);
}
function A(param1 , param2)
{
  alert(2);
}
</script>

来自代码隐藏:

Page.ClientScript.RegisterStartupScript(this.GetType(), "CallMyFunction", "A()", true);

结果: ALER(2);

4 个答案:

答案 0 :(得分:2)

JavaScript不支持具有相同名称和不同参数的两个函数。因为一切都是对象,所以名称才重要。参数只是函数的元数据。

这些功能必须有不同的名称才能发挥作用。

答案 1 :(得分:0)

Javascript不支持函数重载。

请参阅此Stack Overflow question的接受答案,这可能会对您有所帮助。

答案 2 :(得分:0)

如果要在JavaScript中实现函数重载,可以使用JavaScript中的每个函数都具有的arguments对象。 arguments对象只是一个类似于对象的数组,它包含传递给函数的参数/参数。您可能需要稍微改变一下方法。

试试这个:

function A() {
    if(arguments.length === 1) {
        // code for one argument goes here
    }
    if(arguments.length === 2) {
        // code for two arguments goes here
    }
    // your further logic if needed
}

现在您可以使用不同的参数调用函数A,如下所示:

A(1); // code for arguments.length === 1 gets executed
A(1, 2); // code for arguments.length === 2 gets executed

注意:这不完全是函数重载,而是试图解决一种没有重载的问题。

希望这有帮助。

答案 3 :(得分:0)

实际上,实际行为是- Javascript将使用最后一个函数覆盖具有相同名称(即使它们具有不同的参数编号/类型)的所有先前编写的函数。 因此,无论您在函数调用中提供什么参数-它始终是将被调用的最后一个函数。