call( )、apply( )
call( )和apply( )都是用于改变函数执行时的上下文,唯一最大区别在于传入参数的形式不同。
这两个函数都是函数的方法,只有函数能够打点调用call()、apply(),表示用指定的上下文执行这个函数。
<script type="text/javascript"> function fun(){ alert(this.age); } var obj = { "name" : "小明", "age" :12 } fun.call(obj); fun.apply(obj); </script>
-
call( )
call( )函数用于调用当前函数functionObject
,并可同时使用指定对象thisObj
作为本次执行时functionObject
函数内部的this
指针引用。
语法:
functionObject.call( [ thisObj [, arg1 [, arg2 [, args...]]]] )
-
apply( )
apply( )函数用于调用当前函数functionObject
,并可同时使用指定对象thisObj
作为本次函数执行时函数内部的this
指针引用。
apply( )函数的用途和call( )函数一样,区别在于传参数,call()
函数是将Function对象的参数一个个分别传入,apply()
函数是将Function对象的参数以一个数组或arguments
对象的形式整体传入。
语法:
functionObject.apply( [ thisObj [, argsArray ]] )
如果提供了argsArray
参数,则该参数必须是一个数组,或者arguments
对象。数组中的每个元素(arguments对象中的每个属性0...n)将按照顺序作为参数传入该函数。
如果提供了argsArray
参数,则必须提供thisObj
参数。
例子对比:
<script type="text/javascript"> function fun(a,b,c){ alert(a+b+c); } var obj = { "name" : "小明", "age" :12 } fun.call(obj,10,11,5); //使用call函数时传入可连续传入多个参数 fun.apply(obj,[10,15,5]);// 使用apply函数必须传入数组的形式 </script>
apply( ) 函数妙用:
apply可以接受一个数组当做函数的“罗列”的参数。
例子:使用apply( )传入一组数组,罗列成散列的参数,可以直接输出数组中最大值
Math.max.apply(window,[4,342,345,234,34,56,234]);