zoukankan      html  css  js  c++  java
  • JS函数重载解决方案

     JS的函数定义可以指定形式参数名称,多多少少我们会以为js至少可以支持参数个数不同的方法重载,然而遗憾的是这仅仅是一个假象,js所有的参数都是以arguments传递过去的,这个参数类似于数组,在函数调用的时候,所有的实参都是保存在了这个数据结构里面,我们定义函数的时候所指定的形式参数其实是为这个数据结构里面的数据定义一个快捷的访问方式。也就是说js所有的函数都是支持无限个参数的,加上数据类型是弱类型,那么JS的函数除了名称就真的没有方法区别了?

      办法总是有的,我们可以利用JavaScript中的特殊对象arguments来模拟函数重载。用它来判断传入参数的个数或类型以区分重载。

    1.根据参数个数重载

    js判断传入参数数量可以用arguments.length这个属性来判断;

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <script type="text/javascript">
    function add() {
        if (arguments.length == 1) {
            alert(arguments[0] + 10);
        }
        else if (arguments.length == 2) {
            alert(arguments[0] + arguments[1]);
        }
    }
    //函数调用
    add(10);
    add(10, 20);
    </script>

    2.根据参数类型重载

    判断变量类型的3种方法:
    1.用 typeof 语句判断变量类型,typeof语句返回类型对应的字符串。
    2.用 instanceof 语句判断变量类型,instanceof语句返回true/false。
    3.用 constructor 属性判断变量类型,这个属性返回用来构造该变量的构造函数引用。
    对照表:可以看出用 typeof 不能准确的判断出具体的类型,所以我们用 constructor 来进行判断。

    typeof string number object function boolean object object
    constructor String Number Object Function Boolean Array User Define
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    <script type="text/javascript">
    function add()
    {
        if (arguments.length == 0) return 0;
        var sum=0;
        for(var i=0; i<arguments.length; i++){
            if(arguments[i].constructor == Number){
            //或者改为:if(arguments[i] instanceof Number)
            //或者改为:if(typeof(arguments[i])=="number")
            sum += arguments[i];
          }
        }
        return sum;
    }
    //函数调用
    alert(add(10));
    alert(add(10,20));
    </script>
  • 相关阅读:
    (转)sqlite3生成lib遇到的问题
    C++中的static
    static int和static final int的区别
    用static关键字修饰类
    Shell脚本的编写
    linux定时任务的设置 crontab 配置指南
    s3cmd的安装与配置
    s3cmd的安装与使用
    -Dmaven.multiModuleProjectDirectory system propery is not set.
    maven 环境搭建 Myeclipse配置
  • 原文地址:https://www.cnblogs.com/xiaochao12345/p/4137513.html
Copyright © 2011-2022 走看看