我不是很擅长javascript,所以我在这里问。
以下是示例代码。
<html>
<head>
<script>
function test(one)
{
alert('surprise! first function with one parameter');
}
function test(one,two)
{
alert('expected: second function with two parameters');
}
</script>
</head>
<body onload="javascript:test('first')">
</body>
</html>
问题:
我希望'surprise! first function with one parameter'
会被警告onload,因为我只用一个参数调用该函数。令我惊讶的是,它在第二个功能中发出警报。
答案 0 :(得分:8)
Javascript不支持方法重载; 它只是覆盖函数,因此每次都会调用最后一个函数。
解决这个问题的方法就是制作1个函数并在其中放入一些条件来检查变量是否已设置。
答案 1 :(得分:2)
你宣布两次功能测试。第二个覆盖了第一个定义。
答案 2 :(得分:1)
在JavaScript中不允许重载函数。所以在这种情况下,第二个函数会覆盖第一个函数,因此你总能看到这个结果。
解决这个问题的方法是检查参数的值:
function test(one,two)
{
if(two)
alert('expected: second function with two parameters');
else
alert('surprise! first function with one parameter');
}
答案 3 :(得分:0)
在javascript中,不需要函数的参数。在使用之前,您需要检查参数是否未定义。
如果之前使用过这个,以便在类似于下面的javascript中实现getter / setter类型功能:
var _pageSize;
function pageSize(value) {
if (value) {
_pageSize = value;
}
else {
return _pageSize;
}
}
然后,您可以使用pageSize方法获取和设置页面大小,如下所示:
if (pageSize() < 15) {
pageSize(15)
}
答案 4 :(得分:0)
啊,Javascript不会像那样做多态。它确实有一个参数集合,您可以查看,然后根据输入做正确的事情。
之类的东西:
function calcAverage()
{
var sum = 0
for(var i=0; i<arguments.length; i++)
sum = sum + arguments[i]
var average = sum/arguments.length
return average
}
document.write("Average = " + calcAverage(400, 600, 83))
答案 5 :(得分:0)
调用此类函数时:
function test(one,two)
只有一个参数,参数“two”将具有特殊类型:undefined。 任何访问变量2的尝试都将失败并显示“two is undefined”错误,以避免此类错误使用typeof命令:
function test(one,two)
{
if (typeof two == "undefined") {
//give default value
two = "default value here";
}
...
}