ホームページ >ウェブフロントエンド >jsチュートリアル >如何实现JS函数的重载_javascript技巧

如何实现JS函数的重载_javascript技巧

WBOY
WBOYオリジナル
2016-05-16 19:25:461110ブラウズ

javascript不能支持函数的重载,如下:

复制代码 代码如下:

<script> <BR>function f(length) <BR>{ <BR> alert("高为:"+length); <BR>} <br><br>function f(length,width) <BR>{ <BR> alert("高为:"+length+",宽为:"+width); <BR>} <BR><BR></script>

上面那段代码其实是行不通的,因为函数定义时的参数个数和函数调用时的参数个数没有任何关系。 在函数中可以用f.arguments[0]和f.arguments[1]得到调用时传入的第一和第二个参数,所以定义function(length),后面用f(10,10)调用是没有问题的。所以在上面这段代码中,第二个函数是永远不可能被调用到的,那么,要怎样才能实现像函数重载那样的功能呢?
    那就是在函数定义中用f.arguments.length判断一下调用时传入的参数个数。然后对不同的情况采用不同的处理方式。
如下:
复制代码 代码如下:

<script> <BR>function f() <BR>{ <BR> var len= arguments.length; <BR> if(1 == len) <BR> { <BR> var length = arguments[0]; <BR> var width = arguments[1]; <BR> f2(length,width); <BR> } <BR> else <BR> { <BR> var length = arguments[0]; <BR> f1(length); <BR> } <BR>} <br><br>function f1(length) <BR>{ <BR> alert("高为:"+length); <BR>} <br><br>function f2(length,width) <BR>{ <BR> alert("高为:"+length+",宽为:"+width); <BR>} <BR><BR></script>

这样,你就可以给函数f()传入一个参数也可以传入两个参数了,比如f(10)和f(10,10);
    个人觉得,这样虽然可以实现重载,但也不是很好用,我们可以根据具体情况在一个函数中实现重载,如果要重载的两个函数相差较大,那就保留两个函数,而如果两个函数的实现基本差不多,那么可以在一个函数中进行判断,处理不同的部分,而不需要像上面那样写成三个函数,如下:
复制代码 代码如下:

<script> <BR>function f(length) <BR>{ <BR> var len= arguments.length; <BR> if(1 == len) <BR> { <BR> var width = arguments[1]; <BR> alert("高为:"+length+",宽为:"+width); <BR> } <BR> else <BR> { <BR> alert("高为:"+length); <BR> } <BR>} <BR><BR></script>
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。