[js对象]JS入门之arguments对象
2015-01-06 14:23
295 查看
[js对象]JS入门之arguments对象
每天一对象,JS天天见,今天我们来看看arguments对象及属性。arguments对象不能显式创建,arguments对象只有函数开始时才可用。函数的 arguments 对象并不是一个数组,访问单个参数的方式与访问数组元素的方式相同。索引 n 实际上是 arguments 对象的 0…n 属性的其中一个参数。下面的示例演示了 arguments 对象的用法,arguments对象和Function是分不开的。
1
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
function ArgTest(a, b){
2
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
var i, s = "The ArgTest function expected ";
3
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
var numargs = arguments.length; // 获取被传递参数的数值。
4
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
var expargs = ArgTest.length; // 获取期望参数的数值。
5
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
if (expargs < 2)
6
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
s += expargs + " argument. ";
7
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
else
8
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
s += expargs + " arguments. ";
9
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
if (numargs < 2)
10
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
s += numargs + " was passed.";
11
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
else
12
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
s += numargs + " were passed.";
13
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
s += "\n\n"
14
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
for (i =0 ; i < numargs; i++){ // 获取参数内容。
15
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
s += " Arg " + i + " = " + arguments[i] + "\n";
16
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
17
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
return(s); // 返回参数列表。
18
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
以上是arguments对象,由于和Function对象紧密地联系在一起。也就是说每一个函数都有自己的argument属性。下面我们来看看argument属性:为当前执行的 function 对象返回一个arguments 对象,function
参数是当前执行函数的名称,可以省略。
通过 arguments 属性(相对于Function来说),函数可以处理可变数量的参数。arguments 对象的 length 属性包含了传递给函数的参数的数目。对于arguments 对象所包含的单个参数,其访问方法与数组中所包含的参数的访问方法相同。请看下面的例子:
1
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
function ArgTest(){
2
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
var i, s, numargs = arguments.length;
3
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
s = numargs;
4
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
if (numargs < 2)
5
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
s += " argument was passed to ArgTest. It was ";
6
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
else
7
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
s += " arguments were passed to ArgTest. They were " ;
8
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
for (i = 0; i < numargs; i++)
9
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
10
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
s += arguments[i] + " ";
11
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
12
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
return(s);
13
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
我们知道每一个对象都有自己的属性,arguments对象也不例外,首先arguments的访问犹如Array对象一样,用0到arguments.length-1来枚举每一个元素。下面我们来看看callee属性,返回正被执行的 Function 对象,也就是所指定的 Function 对象的正文。callee 属性是 arguments 对象的一个成员,仅当相关函数正在执行时才可用。callee 属性的初始值就是正被执行的 Function 对象,这允许匿名的递归函数。
1
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
function factorial(n){
2
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
if (n <= 0)
3
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
return 1;
4
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
else
5
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
return n * arguments.callee(n - 1)
6
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
7
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
print(factorial(3));
8
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
到这里基本上把arguments对象给讲完了,不知还有其他的东西吗?其实很多东西我们都已经很熟悉了,除了上述的callee属性外,其他的我们都时不时在应用他们。OK,今天的对象学习就到这里了,明天要看的对象将是Boolean对象。
相关文章推荐
- JS入门之arguments对象
- JS入门之arguments对象
- [js对象]JS入门之arguments对象
- JS入门之arguments对象
- [js对象]JS入门之arguments对象
- [js对象]JS入门之Boolean&Object对象
- [js对象]JS入门之Global对象
- js入门·对象属性方法大总结
- 转"js入门·对象属性方法大总结"
- js入门·对象属性方法大总结
- [js对象]JS入门之Array对象
- js入门·对象属性方法大总结
- [js对象]JS入门之Date对象
- Javascript入门学习第四篇 js对象和数组第1/2页
- js入门·对象的综合练习(重点介绍Link对象)
- js入门·对象属性方法大总结
- [荐]JS入门·对象属性方法大总结
- js入门实例の构造函数/方法的定义和调用/原型对象
- js入门·对象的综合练习(重点介绍Link对象)
- JS应用DOM入门:和DHTML对象模型的比较