[function.]arguments[n] 参数function :选项。当前正在执行的 Function 对象的名字。 n :选项。要传递给 Function 对象的从0开始的参数值索引。 说明
Arguments是进行函数调用时,除了指定的参数外,还另外创建的一个隐藏对象。Arguments是一个类似数组但不是数组的对象,说它类似数组是因为其具有数组一样的访问性质及方式,可以由arguments[n]来访问对应的单个参数的值,并拥有数组长度属性length。还有就是arguments对象存储的是实际传递给函数的参数,而不局限于函数声明所定义的参数列表,而且不能显式创建 arguments 对象。arguments 对象只有函数开始时才可用。下边例子详细说明了这些性质: 复制代码 代码如下: //arguments 对象的用法。 function ArgTest(a, b){ var i, s = "The ArgTest function expected "; var numargs = arguments.length; // 获取被传递参数的数值。 var expargs = ArgTest.length; // 获取期望参数的数值。 if (expargs < 2) s += expargs + " argument. "; else s += expargs + " arguments. "; if (numargs < 2) s += numargs + " was passed."; else s += numargs + " were passed."; s += "
" for (i =0 ; i < numargs; i++){ // 获取参数内容。 s += " Arg " + i + " = " + arguments[i] + "
"; } return(s); // 返回参数列表。 }
示例: 复制代码 代码如下: var vehicle=Class.create(); vehicle.prototype={ initialize:function(type){ this.type=type; } showSelf:function(){ alert("this vehicle is "+ this.type); } }
var moto=new vehicle("Moto"); moto.showSelf();
更详细的关于prototype信息请到其官方网站查看。
评论还有更精彩对此的理解,在这我就不再添加了,大家可以看看加深理解。 看完了上面的代码,就可以,下面的代码是给一些比较想立即看到效果的人看的。多测试。 复制代码 代码如下: <script language="JavaScript"> /**//* * 演示arguments的用法,如何获取实参数和形数数 */ function argTest(a,b,c,d){ var numargs = arguments.length; // 获取被传递参数的数值。 var expargs = argTest.length; // 获取期望参数的数值。 alert("实参数目为:"+numargs) alert("形数数目为:"+expargs)
alert(arguments[0]) alert(argTest[0]) //undefined 没有这种用法 } //argTest(1,2) //结果:实参数目为:2;形数数目为:4;1;undefined //argTest(1,2,3,4,5) //结果:实参数目为:5;形数数目为:4;1;undefined /*总结:js参数传递不像c#等语法要求的必须与函数定义一致,可以根据应用不同增加或减少参数,极端情况可以不声明参数,如*/ var test = function(){ var a = 0; var l = 0; while(l<arguments.length) { a += arguments[l]; l++; } alert(a); } test();//0 test(1,2);//3
function callerDemo() { if (callerDemo.caller) { var a= callerDemo.caller.arguments[0]; alert(a); } else { alert("this is a top function"); } } function handleCaller() { callerDemo(); }
//callerDemo(); //结果:this is a top function //handleCaller("参数1","参数2"); //结果:参数1 /*总结:caller应用于函数对象,可以取到上层调用的函数对象及参数 */
/**//* * 演示函数的callee属性. * 说明:arguments.callee:初始值就是正被执行的 Function 对象,用于匿名函数 */ function calleeDemo() { alert(arguments.callee); } //calleeDemo(); //(function(arg0,arg1){alert("形数数目为:"+arguments.callee.length)})(); /*总结:可用于实现递归,如:*/ var i = 0; var a = function(){ i += arguments[0]; if(i>100||i==0) alert(i); else arguments.callee(i); }; a(1); //结果128,其实就是2的7次方