马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 不二如是 于 2017-7-8 19:45 编辑
在函数代码中,使用特殊对象 arguments,程序猿兄弟就无需明确指出参数名,直接能访问到。
在JavaScript中,arguments对象是比较特别的一个对象,实际上是当前函数的一个内置属性。
arguments非常类似Array,但实际上又不是一个Array实例。
主要有以下三个玩法:
- 实现重载
在JavaScript内置结构中并没有函数重载的功能,为啥呢?
因为arguments对象能够模拟重载。
比如,最简单的一种方式,根据参数的个数进行重载,代码如下所示:<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>鱼C出品</title>
</head>
<body>
<script>
function showLenght(){
switch(arguments.length)
{
case 0:
document.write("长度为0");
break;
case 1:
document.write("长度为1");
break;
case 2:
document.write("长度为2");
break;
case 3:
document.write("长度为3");
break;
default:
document.write("超出可预测范围");
break;
}
}
showLenght('Welcome','to','Fishc');
</script>
</body>
</html>
输出3,意味着arguments对象可以加载到“变量的长度”,而不需要起多个名字的方法。
利用arguments对象实现函数重载的方式可以有几种,除了上面根据参数的个数。
还可以根据传入参数的类型来执行不同的操作。
也可以利用参数中特殊的参数值来进行不同的操作。
- 同数组下标访问实参
JavaScript中每个函数都会有一个Arguments对象的实例arguments。
它引用着函数的实参,而且可以用数组下标的方式来引用arguments的元素。
来段代码:<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>鱼C出品</title>
</head>
<body>
<script>
function showLenght(){
var test = "";
for(var i = 0 ; i < arguments.length; i++)
{
test += arguments[i] + ' ';
}
document.write(test);
}
showLenght('Welcome','to','Fishc');
</script>
</body>
</html>
arguments.length为函数实参的个数。
要注意的是:
arguments对象并不是一数组,它也不具有数据的所有方法。
但是访问单个参数的方式与访问数组元素的方式相同,argument
所以很容易把二者搞混,其实不一样的两个东西~
- 属性callee指向自己
对象都是有自己的属性和方法的,Arguments对象也是一样。
callee就是它的方法,这个方法用的不多,很容易被我们忽略。
它指向的是正在被执行的Function对象,既然是指向自己,那么很容易联想到“递归”
也来段代码看一看:<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>鱼C出品</title>
</head>
<body>
<script>
function getSum(i){
if(i == 1)
{
return 1;
}
else{
return i+arguments.callee(i-1);
}
}
document.write(getSum(100));
</script>
</body>
</html>
顺利完成,从1到100求和,不过既然是“递归”,所以实际开发中用的很少。
友情提示:
这位鱼油,如果喜欢本系列Js帖子,请订阅 专辑☞( 传送门)( 不喜欢更要订阅 ) |