• JS实现函数重载


    不想写太多的方法名,网上百度的:

    JavaScript 语言的方法声明中,不能明确指定参数的类型和个数,所以不能实现方法的重载,但是我们可以用其他的方法来实现重载的效果。

    在 JavaScript 的方法内,有个叫做 arguments 的变量数组,它是只读的,所有实际传入的参数变量都
    放在了里面,通过它,我们可以对传入的参数进行类型检查,从而实现重载的效果。


    判断一个变量的类型有两种方法

    用 typeof 语句:
    function check(){
    if(typeof arguments[0] == 'string')
    alert('你传入的参数是个字符串');
    else if(typeof arguments[0] == 'number')
    alert('你传入的参数是个数字');
    }

    用所有 JavaScript 变量都带有的一个属性 constructor,这个属性指向用来构造该变量的构造函数:
    function check(){
    if(arguments[0].constructor == String)
    alert('你传入的参数是个字符串');
    else if(arguments[0].constructor == Number)
    alert('你传入的参数是个数字');
    }

    对照表:

    typeof constructor ---------------------------

    string String

    number Number

    object Object

    function Function

    boolean Boolean

    object Array

    object User

    一个新的函数重载模式。代码如下

    var FunctionH = {
                map: function (arr, callback, pThis) {
                    var len = arr.length;
                    var rlt = new Array(len);
                    for (var i = 0; i < len; i++) {
                        if (i in arr)
                            rlt[i] = callback.call(pThis, arr[i], i, arr);
                    }
                    return rlt;
                },
                overload: function (dispatcher, func_maps) {
                    if (!(dispatcher instanceof Function)) {
                        func_maps = dispatcher;
                        dispatcher = function (args) {
                            var ret = [];
                            return FunctionH.map(args, function (o) { return typeof o }).join();
                        }
                    }
                    return function () {
                        var key = dispatcher([].slice.apply(arguments));
                        for (var i in func_maps) {
                            var pattern = new RegExp("^" + i.replace("*", "[^,]*").replace("...", ".*") + "$");
                            if (pattern.test(key)) {
                                return func_maps[i].apply(this, arguments);
                            }
                        }
                    }
                }
            }

    应用:

    TINY.page = function () {
                var isNull = function () {
                    if (document.getElementById("txtPEnterprise_NO").value == "") {
                        return true;
                    }
                    else
                        return false;
                };
                return {
                     select: function () {
                        if (isNull()) {
                            top.Dialog.alert("请您输入追溯码!");
                            return false;
                        }
                        else {
                            return true;
                        }
                    },
                    confirm: FunctionH.overload({
                        'string': function () {
                            if (isNull()) {
                                top.Dialog.alert("请您输入追溯码!");
                                return false;
                            }
                            if (!confirm(arguments[0])) {
                                return false;
                            }
                            return true;
                        },

                        'string,object':function(){

                             // arguments[0];为字符串值

                            //  arguments[1];为object值

                       },
                        'object': function () {
                            if (isNull()) {
                                top.Dialog.alert("请您输入追溯码!");
                                return false;
                            }
                            var obj = arguments[0];
                            if (typeof obj == "object") {
                                var tooltip = obj.getAttribute("title")
                                if (tooltip == "lock") {
                                    if (!confirm("您确定锁定该批次产品吗?")) {
                                        return false;
                                    }
                                    return true;
                                }
                                else if (tooltip == "unlock") {
                                    if (!confirm("您确定解锁该批次产品吗?")) {
                                        return false;
                                    }
                                    return true;
                                }
                            }
                        }
                    })
                }
            } ();

    调用:

     <asp:Button ID="BtnLock" Enabled="false" runat="server" Text="锁 定" 
                         CssClass="blueButtonCss1" onclick="BtnLock_Click" ToolTip="lock"  OnClientClick="return TINY.page.confirm(this);"/> &nbsp; &nbsp;
     <asp:Button ID="BtnDestory" Enabled="false" ToolTip="destory" runat="server" 
                            Text="销 毁" CssClass="blueButtonCss1" onclick="BtnDestory_Click"  OnClientClick="return TINY.page.confirm('确定销毁?');"/>

     TINY.page.confirm('确定销毁?',this);

    转载自:

    http://www.cnblogs.com/bluedream2009/archive/2011/01/05/1925963.html

    http://www.jb51.net/article/19579.htm

  • 相关阅读:
    Elasticsearch 从入门到学会之五(索引API-索引属性)
    jenkins 如何发布用java -jar来启动的java项目
    k8s从入门到精通-Pod定义详解
    Docker从入门到精通<9>-docker配置文件以及重启策略
    Docker从入门到精通<8>-docker-compose任务编排
    如何选择Containerd和docker
    Docker从入门到精通-企业级私有仓库harbor
    Docker从入门到精通<7>-docker存储驱动选择
    Docker从入门到精通<6>-使用Dockerfile构建镜像
    Docker从入门到精通<5>-数据持久化
  • 原文地址:https://www.cnblogs.com/KimhillZhang/p/2971206.html
Copyright © 2020-2023  润新知