JavaScript中的函数(方法)重载

学习JavaScript有几天了,今天看到JS中的面向对象编程。我们知道在一般的面向对象的编程中方法是可以重载的,通俗得说就是可重载方法的调用是根据形参决定的。比如说一个类中有两个方法(不完整):

cal (a,b) 	{ return a+b;};
cal (a,b,c) 	{ return a*b;};

如果调用第二个带三个参数的方法”cal(1,2,3);”,将返回1乘2的值,而不是1加2。

然而在JavaScript中函数是不支持重载的,如果我们必须要用到重载怎么办呢?这时候就得用到arguments对象了,它可以检测到返回的函数参数个数。我们可以调用它的length属性来做判断从而达到防重载的效果。用法如下:

function returnArgs (){ alert(arguments.length); }
returnArgs("小","强");	 //输出2
returnArgs(2009);		//输出1
returnArgs();			//输出0

总结一下写一个小程序,下面的脚本代码一定会输出”3|6″从而模仿实现了JavaScript的函数重载:

<script type="text/javascript">
	function cal (a,b,c){
		if (arguments.length == 2){
			return a+b;
		}
		else if(arguments.length == 3){
			return a*b*c;
		}
	}
	document.write (cal(1,2) + " | ");
	document.write (cal(1,2,3));
</script>

JavaScript中的函数(方法)重载》上有 21 条评论

  1. 额,技术人才,是从事这行业的?对了,谢谢提醒博客“突出”问题,呵呵。这主题是参考幸福收藏夹做的?

    • @Mr Bie 呵呵。别笑我啊。我可是JS新手^!^用的是一个框架可能在结构上会比较相似把。

  2. 不知在哪本书里看过,java可以根据参数形式来调用类中同名方法,执行不同的语句,不过,我去PHP5里试下一下,似乎不行,会提示不能重新声明某个方法。
    受你的启发,我想用PHP来实现这样的,不过PHP里函数没有arguments这样的对象,似乎PHP里的函数都没有对象。我翻了一下几个月前的笔记,发现PHP里的函数是可以给默认值的,于是也便实现了同样的效果。

    • @博译论 我是自己买的书,不过这书太恶心了将就在看呢。本来想买“悟透javascript”的这儿的书店书太少了。所以就随便了。我觉得网上的js教程都讲的不好。

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

注意: 评论者允许使用'@user空格'的方式将自己的评论通知另外评论者。例如, ABC是本文的评论者之一,则使用'@ABC '(不包括单引号)将会自动将您的评论发送给ABC。使用'@all ',将会将评论发送给之前所有其它评论者。请务必注意user必须和评论者名相匹配(大小写一致)。