JavaScript 能实现函数重载吗?

neodotnet 2004-09-11 05:54:04
我写了两个同名但参数个数不同的方法如下,
function f(url)
{
...// 实现在同一窗口打开链接
}

function f(url, target);
{
...// 实现在要求的窗口打开链接
}

在调用时,
f('http://tempuri.org');
f('http://tempuri.org', '_blank');

结果都在新窗口打开链接, 我注释掉参数多的那个函数, 于是都在同一窗口打开链接,但是两次都没有提示参数不对的错误, 是何原因呢?

如何实现函数重载?
...全文
1768 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
mjpclab 2004-09-11
  • 打赏
  • 举报
回复
变量是弱类型的,不太好重载
只有形参数不同时,可以用arguments.length判断
gaofaq 2004-09-11
  • 打赏
  • 举报
回复
<script language="JavaScript">
function f() {
var len= arguments.length;
len == 1 ? document.location = arguments[0] : window.open(arguments[0],arguments[1]);
}
</script>

<body>
<a href="javascript:f('http://www.baidu.com');">Location</a><br>
<a href="javascript:f('http://www.baidu.com','_blank');">Blank</a>

</body>
robinzsy 2004-09-11
  • 打赏
  • 举报
回复
ps:js中,函数是可以重载的。也就是说:你先定义的function f(url)已经被
function f(url,target)重载过了。所以你调用后,结果都在新窗口打开链接。
robinzsy 2004-09-11
  • 打赏
  • 举报
回复
问题:我注释掉参数多的那个函数, 于是都在同一窗口打开链接,但是两次都没有提示参数不对的错误, 是何原因呢?

回答:函数定义时的参数个数和函数调用时的参数个数没有任何关系。 function f(url, target)本身定义的时候甚至可以不加参数,也就是可以定义为
function f(),在函数中可以用f.arguments[0]和f.arguments[1]得到调用时传入的参数url和target。所以你定义function f(url),后面用 f('http://tempuri.org', '_blank')调用是没有问题的。

所以,你根本无需用function f(url, target)重载function f(url)。只需在函数定义中用
f.arguments.length判断一下调用时传入的参数个数。然后对不同的情况采用不同的处理方式就行了。
neodotnet 2004-09-11
  • 打赏
  • 举报
回复
看来是不能重载了?
蒼瞑雷舞 2004-09-11
  • 打赏
  • 举报
回复
我想知道你所指的 "函数重载?" 是什么意思?

首先在同一个 document 中定义两个名字相同的函数是不允许的,如果浏览器没有提示语法错误,那么能够被调用的函数只有后者,前者当无效。

我建议你使用缺省值的思想,我习惯用 VBScript,你看看能不能够帮得了你啦!

<script language="VBScript">
Sub f( url, target )
If target = "" Then target = "_self"

'f 函数的其他语句
End Sub
</script>
cpio 2004-09-11
  • 打赏
  • 举报
回复
面向对象思想学多了吧

87,904

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧