• arguments对象----不定参数的实现方式


    function format(string) {
    var args = arguments;
    var pattern = new RegExp("%([1-" + arguments.length + "])", "g");
    return String(string).replace(pattern, function(match, index) {
    return args[index];
    });
    }; 

    网上关于arguments的一段代码,不懂红色部分,来看一下array.replace(pattern,function(match,index){}的用法。

    当replacement是函数时比较特殊,需要知道对应的参数表示什么。

    详见w3scool(http://www.w3school.com.cn/jsref/jsref_replace.asp):

    注意:ECMAScript v3 规定,replace() 方法的参数 replacement 可以是函数而不是字符串。在这种情况下,每个匹配都调用该函数,它返回的字符串将作为替换文本使用。该函数的第一个参数是匹配模式的字符串。接下来的参数 是与模式中的子表达式匹配的字符串,可以有 0 个或多个这样的参数。接下来的参数是一个整数,声明了匹配在 stringObject 中出现的位置。最后一个参数是 stringObject 本身。

    如需详细了解replace的参数,运行下这段代码就清楚了。

        (function(window){
            function fn(str){
                this.str=str;
            }
    
            fn.prototype.format = function(){
                var arg = arguments;
                return this.str.replace(/{(d+)}/ig,function(a,b,c,d){
                    console.log(a);
                    console.log(b);
                    console.log(c);
                    console.log(d);
                    return arg[b]||"";
                });
            };
            window.fn = fn;
        })(window);
    
        //use
        (function(){
            var t = new fn('<p><a href="{0}">{1}</a><span>{2}</span></p>');
            console.log(t.format('http://www.alibaba.com','Alibaba','Welcome'));
        })();
    

    讲到可以通过arguments实现不定参数、模拟函数重载,下面给出的code大概就是这个意思了。

    function Add(firstnumber,sencondnumber) {
    if (arguments.length == 0)//没有传递参数
    {
    return null;
    }
    else if (arguments.length == 1) {//传递的是一个参数
    return firstnumber;//也可以写为 return arguments[0];
    }
    else if(arguments.length == 2)//传递的是两个参数
    {
    
    return firstnumber+sencondnumber;//也可以写为 return arguments[0]+arguments[1];
    }
    else {
    var total=0;
    for (var i = 0; i < arguments.length; i++) {
    total=total+arguments[i]
    }
    return total;
    }
    
    }
  • 相关阅读:
    tomcat最大连接数
    【转】性能测试总结---测试流程篇
    nginx访问量统计
    在Excel中计算过去某一天到今天一共多少天
    Linux服务器/etc/profile
    Linux服务器安装MySQL
    idea无法识别maven项目
    python3 实现RC4加解密
    Python实现128-ECB 解密
    BlowFish加解密原理与代码实现
  • 原文地址:https://www.cnblogs.com/web-coding/p/4712279.html
Copyright © 2020-2023  润新知