Home  >  Article  >  Web Front-end  >  Javascript基础 函数“重载” 详细介绍_基础知识

Javascript基础 函数“重载” 详细介绍_基础知识

WBOY
WBOYOriginal
2016-05-16 17:18:40941browse

  Javascript不像其他编程语言一样具有函数签名(什么是函数签名,简单的说就是说函数的接受参数类型和参数个数,也有人认为返回类型也应该包括。具体概念大家可以到网上查询)。

所以Javascript是不能像其他语言一样实现方法名相同,参数个数不同…的这类重载的,不信你可以试试:

复制代码 代码如下:

         function show(){
             alert("1");
         }
         function show(num1){
             alert(num1);
         }

         window.onload=function(){
             show();
             show(2);
         }

断点调试下,不带参数的show方法是不会被执行的,它会被show(num1)方法给覆盖掉。

那么Javascript中就不可以实现“重载”了么?答案是可以的,只是是另一种方式而已。对,就是利用arguments。

那么什么是arguments呢?在JS中它是一个特殊的属性,它可以像数组一样通过下标索引获取参数的值(但它不是数组),通过length获取参数个数:

复制代码 代码如下:

         function showParamsCount(){
             alert("参数个数:"+arguments.length);//输出:参数个数:4
             alert("下标索引为3的参数:"+arguments[3]);//输出: 下标索引为3的参数:你好
         }

         window.onload=function(){
             showParamsCount("Hello",4,5,"你好");
         }

还要知道的一点是JS中函数的命名参数不是必须的,所以要想知道调用时传递了多少个参数还是得通过arguments获取参数。

下面就实现一个简单的方法重载:

复制代码 代码如下:

         function showMessage(){
             if(arguments.length==1){
                 alert(arguments[0]);
             }else if( arguments.length==2){
                 alert(arguments[0]+"说:"+arguments[1]);
             }else{
                 return false;
             }
         }

         window.onload=function(){
             showMessage("Hi!");
             showMessage("张三","Hi 你妹");
         }

这样JS的重载算是实现了。

在看js高级程序设计这本书的时候发现arguments的值与对应命名参数的值永远同步,以前没注意过这个问题

复制代码 代码如下:

         function showMessage(name,msg){
             arguments[1]="我可以改变msg的值";
             alert(name+"说:"+msg);//输出:张三说:我可以改变msg的值
         }

         window.onload=function(){
             showMessage("张三","Hi 你妹");
         }

好吧关于js“重载”的基础知识就这么些

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn