zoukankan      html  css  js  c++  java
  • 语言特性-函数重载与类型检查

    函数重载要依赖于两点:判断传入参数数量的能力和判断传入参数类型的能力。

    JS函数的参数列表,参数仅在函数内有效。参数列表是一个伪数组,可以访问其中的元素,具有.length属性,但是不能push()

    <script language="javascript" type="text/javascript">

            function sendMessage(msg, obj) {

                if (arguments.length == 2) {

                    obj.handleMsg(msg); //参数为函数的第一个参数

                }

                else {

                    alert(msg);

                }

            }

     

            sendMessage("hello,javascript!"); //输出hello,javascript!

            //将我们写好的对象传入,用handleMsg方法调

            sendMessage("hello", {

                handleMsg: function(msg) { //此处方法必须和obj.handleMsg相同

                    alert("print:  " + msg);

                }

            }

                  );

            //--------------------------------------

            //一个接受任意数量参数,并将参数转化为数组的函数

            function makeArray() {

                var arr = [];

                for (var i = 0; i < arguments.length; i++) {

                    arr.push(arguments[i]);

                }

                return arr;

            }

            //将makeArray函数实例化,并输出数组的每个值

            function printArray() {

                var array = makeArray("asd", "42", 90, "bj", 900);

                for (var i = 0; i < array.length; i++) {

                    alert(array[i]);

                }

            }

            printArray();

            //------------------------------------

            //在函数中判断参数类型的时候,如果没有参数,那么其类型必定为undefined.

            function displayError(msg) {

                if (typeof msg == undefined) {

                    msg = "undefined";

                }

                msg = typeof msg;

                alert(msg);

            }

            displayError("rxm");

            //------------------------------------

            //判断类型的时候有两张方法,

            //一:typeof eg:typeof msg[当变量不是object或array时,这种方法很完美]

            //二:引用所有JS对象都拥有的一个属性,这个属性引用的是构造该对象时候的函数[构造函数]

            var msg = "rxm,ru,rem";

            var arr = new Array();

            if (msg.constructor ==

            String) {

                arr = msg.split(","); //如果变量是字符串,将其切成数组

            }

            //------------------------------------

            //用变量类型列表检查参数列表

            function strict(types, args) {

                if (types.length != args.length) {

                    throw "变量参数的个数与函数列表不符!";

                }

                for (var i = 0; i < args.length; i++) {

                    if (args[i].constructor != types[i]) {

                        throw "参数类型不符要求!";

                    }

                }

            }

     

            function book(name, price, content) {

                strict([String, Number, Array], arguments);

                for (var i = 0; i < content.length; i++) {

                    alert(content[i]);

                }

            }

            // book("", "", "sd");//抛出异常

            book("语文", 90, ["春", "夏", "秋", "冬"]);

        </script>

  • 相关阅读:
    自定义DelegatingHandler为ASP.NET Web Api添加压缩与解压的功能
    搭建Linux环境--部署discuzx论坛
    搭建Linux环境--安装PHP
    搭建Linux环境--安装Apache
    搭建Linux环境--安装MySQL
    搭建Linux环境--安装tomcat
    搭建Linux环境--安装jdk
    vmware中安装了contes--解决ifconfig无法执行
    设计模式(四)原型模式
    设计模式(三)建造者模式
  • 原文地址:https://www.cnblogs.com/hometown/p/3204222.html
Copyright © 2011-2022 走看看