在JavaScript中,函数也是对象,我们使用下面的语句定义一个函数的时候,其实是定义了一个Function类型的对象。
function add(a,b){
return a+b;
}
add.apply(document,[1,2])
为了说明这个问题,我们可以使用Function的构造函数来定义一个add函数:
<script language="javascript">
var add = new Function('a','b','return a+b');
alert(add(1,2));
</script>
使用这种方法定义的函数和上面的函数完全一样,不过这种语法比较麻烦,一般不会使用。
(函数)Function对象的call方法
call是一个非常有用的方法,它可以控制函数的运行环境,即控制函数内部this所指向的对象。下面的例子可以说明这个问题:
<html>
<head>
<script language="javascript">
function whatsThis(){
alert(this);
}
</script>
</head>
<body>
<button οnclick='whatsThis()'>whatsThis() </button>
<button οnclick='whatsThis.call(document)'>whatsThis.call(document)()</button>
</body>
</html>
如果原来的函数需要接受参数,例如add函数,可以使用如下形式:
add.call(document,1,2)
也就是说,call的第一个参数是要绑定给this的对象,而1和2则是原来的add函数需要接受的参数。
(函数)Function对象的apply方法
apply的使用方法与call基本一致,只是参数是以数组的形式传递的,还是以add函数为例:
add.apply(document,[1,2])
可以看到,原函数add需要接受的两个数字参数是以一个数组的形式传递进apply的。
函数)Function对象的arguments属性
javascript的函数可以接受任意数量的参数,所以定义的时候,参数的个数作并不会限制函数的这个能力。在函数中,我们可以使用arguments来访问传入函数的参数,例如:
<html>
<head>
<script language="javascript">
function howmany(){
var num = arguments.length;
alert(num);
}
</script>
</head>
<body>
<button οnclick='howmany(1,2,3,4)'>howmany(1,2,3,4)</button>
<button οnclick='howmany(1,2,3,4,5,6,7,8)'>howmany(1,2,3,4,5,6,7,8)</button>
</body>
</html>