2.2.4 function的arguments参数对象
JavaScript不支持方法的重载,原因是在JavaScript中同名的function只能有一个,并且function函数的参数个数可以使任意的。
虽然无法直接支持“重载”,但是可以通过arguments对象来伪装重载,让一个function根据参数的不同实现不同的功能。
arguments是在function中的特殊对象,通过arguments对象可以访问到function调用者传递的所有参数信息,比如获取到传入的参数个数:
function testMethod()
{
alert(arguments.length);
}
testMethod(); //输出 "0"
testMethod("abc"); //输出 "1"
可以通过arguments的索引arguments[index]获取到每一个传入的参数值:
function myMethod()
{
alert(arguments instanceof Array);
if (arguments.length == 0)
{
alert("no arguments");
}
else if (arguments.length == 1)
{
alert("Hello:" + arguments[0].toString())
}
}
myMethod();
myMethod("ziqiu.zhang");
显然,上面的方法通过判断参数的个数实现了伪装重载。但是这种实现并不好,因为所有的重载逻辑都集中在一个方法中,并且有令人厌烦的多个if-else分支。
但是使用arguments可以开发出功能强大灵活的函数。在开发jQuery的插件时就要经常使用arguments对象实现函数的伪重载。
JavaScript不支持方法的重载,原因是在JavaScript中同名的function只能有一个,并且function函数的参数个数可以使任意的。
虽然无法直接支持“重载”,但是可以通过arguments对象来伪装重载,让一个function根据参数的不同实现不同的功能。
arguments是在function中的特殊对象,通过arguments对象可以访问到function调用者传递的所有参数信息,比如获取到传入的参数个数:
function testMethod()
{
alert(arguments.length);
}
testMethod(); //输出 "0"
testMethod("abc"); //输出 "1"
可以通过arguments的索引arguments[index]获取到每一个传入的参数值:
function myMethod()
{
alert(arguments instanceof Array);
if (arguments.length == 0)
{
alert("no arguments");
}
else if (arguments.length == 1)
{
alert("Hello:" + arguments[0].toString())
}
}
myMethod();
myMethod("ziqiu.zhang");
显然,上面的方法通过判断参数的个数实现了伪装重载。但是这种实现并不好,因为所有的重载逻辑都集中在一个方法中,并且有令人厌烦的多个if-else分支。
但是使用arguments可以开发出功能强大灵活的函数。在开发jQuery的插件时就要经常使用arguments对象实现函数的伪重载。
