• 语言特性-函数重载与类型检查


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

    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>

  • 相关阅读:
    各种推荐资料汇总。。。
    不错的blog,做计算广告学的,还有机器学习的
    大数据建模,eBay的一个牛人
    factor graph和sum product和TrueSkill相关的两个blog,相当不错
    词云制作工具。。。
    CSS:nthchild选择器用法练习
    CSS控制表格隔行变色:nthchild()选择器
    CSS3calc()函数练习(制作响应式布局)
    CSS3boxsizing属性练习(borderbox设置padding和border不会改变width和height的值)
    CSS3clippath练习
  • 原文地址:https://www.cnblogs.com/hometown/p/3204222.html
Copyright © 2020-2023  润新知