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;
}
}
arguments对象----不定参数的实现方式的更多相关文章
- [js高手之路] es6系列教程 - 不定参数与展开运算符(...)
三个点(...)在es6中,有两个含义: 用在形参中, 表示传递给他的参数集合, 类似于arguments, 叫不定参数. 语法格式: 在形参面前加三个点( ... ) 用在数组前面,可以把数组的值 ...
- javascript es6系列教程 - 不定参数与展开运算符(...)
三个点(...)在es6中,有两个含义: 用在形参中, 表示传递给他的参数集合, 类似于arguments, 叫不定参数. 语法格式: 在形参面前加三个点( ... ) 用在数组前面,可以把数组的值 ...
- STL算法设计理念 - 函数对象和函数对象当参数和返回值
函数对象: 重载函数调用操作符的类,其对象常称为函数对象(function object),即它们是行为类似函数的对象.一个类对象,表现出一个函数的特征,就是通过"对象名+(参数列表)&qu ...
- C和C++中的不定参数
在初学C的时候,我们都会用到printf函数来写Hello World的程序.在我们看printf函数的声明时,会看到类似于下面代码 int printf(const char * __restric ...
- 使用 arguments 对象
arguments 对象表示参数集合,它是一个伪类数组,拥有与数组相似的结构,可以通过数组下标的形式访问函数实参值,但是没有基础 Array 的原型方法. //函数没有定义形参,但是在函数体内通过 a ...
- 不定参数对arguments对象的影响
如果声明函数时定义了不定参数,则在函数被调用时,arguments对象包含了所有传入的参数: function checkArgs(...args){ console.log(args.length, ...
- jacascript 函数参数与 arguments 对象
前言:这是笔者学习之后自己的理解与整理.如果有错误或者疑问的地方,请大家指正,我会持续更新! 调用函数时,实参和形参需要一一对应,但如果参数多了的话,会很苦恼: 我们可以用键值对(字面量对象)的方式传 ...
- 使用arguments对象验证函数的参数是否合法
<script>function sum(arg1,arg2) //加法函数{ var realArgCount = arguments.length; //调用函数时传递的实参个数 va ...
- 第4天:function对象(案例:获取当前日期属于当年第几天、arguments对象、函数类型、参数、返回值、自身调用)
获取当前日期输入当年第几天 //输入,年月日,获取这个日期是这一年的第几天 //年-月--日:20171月31日 function getDay(year,month,day){ //定义变量存储对应 ...
随机推荐
- JS模式
策略 命令 迭代器 代理 组合 发布/订阅 单例 享元 职责链 中介者 装饰者 状态 适配器 设计原则: 单一职责.最少知识.开放-封闭
- chgrp---改变文件或目录所属的用户组
chgrp命令用来改变文件或目录所属的用户组.该命令用来改变指定文件所属的用户组.其中,组名可以是用户组的id,也可以是用户组的组名.文件名可以 是由空格分开的要改变属组的文件列表,也可以是由通配符描 ...
- zip---解压缩文件
zip命令可以用来解压缩文件,或者对文件进行打包操作.zip是个使用广泛的压缩程序,文件经它压缩后会另外产生具有“.zip”扩展名的压缩文件. 语法 zip(选项)(参数) 选项 -A:调整可执行的自 ...
- IDEA 官方教程
https://www.jetbrains.com/help/idea/discover-intellij-idea.html#UserInterface
- Transport Tablespace Set(三) ----transport single tablespace
源端字符集与endian查看: SQL> select userenv('language') from dual; USERENV('LANGUAGE') SIMPLIFIED CHINESE ...
- 第8章7节《MonkeyRunner源代码剖析》MonkeyRunner启动执行过程-小结
最后我们对MonkeyRunner启动的过程做一个总结,当然,当中也包括启动Monkey,尽管它不属于启动过程的一部分: monkeyrunner这个shell脚本会先设置一些执行环境的系统属性保存到 ...
- Android图像处理之熔铸特效
代码: package com.color; import android.content.Context; import android.graphics.Bitmap; import androi ...
- 6.前端开发必备!Emmet使用手册
转自:https://www.w3cplus.com/tools/emmet-cheat-sheet.html 介绍 Emmet (前身为 Zen Coding) 是一个能大幅度提高前端开发效率的一个 ...
- html ---- a 标签 在新窗口打开的问题
- Codefroces Educational Round 26 837 D. Round Subset
D. Round Subset time limit per test 2 seconds memory limit per test 256 megabytes input standard inp ...